Python小知识点总结

2023-10-26

1. super()

在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super() 来实现:

class Animal(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        print ('Hello, I am %s.' % self.name)

class Dog(Animal):
    def greet(self):
        super(Dog, self).greet() 
        print ('WangWang...')

dog = Dog('dog')
dog.greet()

以上面代码为例,dog虽然直接调用的是Dog类,但是Dog类里调用了父类的方法,所以最后的输出应该是:

Hello, I am dog.

WangWang…

super 的一个最常见用法是在子类中调用父类的初始化方法:

class Base(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b

class A(Base):
    def __init__(self, a, b, c):
        super(A, self).__init__(a, b)  # 或是super().__init__(a, b)
        self.c = c

但是super和父类没有实质性的关联,只是上面恰好获取了父类并调用了父类的方法,深入了解super()参考:
Python: 你不知道的 super

2. 如何理解Python代码“if __name__ == ‘__main__’”

简单来说,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

在知乎上看到一个比较有意思的讲解:

假设你是(小明.py)

朋友眼中你是小明(__name__ == ‘小明’),

你自己眼中你是你自己(__name__ == ‘__main__’),

你编程很好, 朋友调你去帮他写程序(import 小明, 这时你在朋友眼中: __name__ == ‘小明’),

但你晚上也会打开xx网站, 做一些自己的事情,直接运行(小明.py), 这时在你眼中:__name__ == ‘__main__’

来源:知乎_铭尚hkyue

更详细的解释可以参考这篇文章:Python 中的 if __name__ == ‘__main__’ 该如何理解

3. 为什么时间戳从1970年算起

在命令行输入如下代码

import time

time.time()

会得到一个十几亿大小的浮点数,这个结果的含义是1970纪元后到现在经过的浮点秒数,这个不只是在Python中,在别的一些语言中也是以1970年作为时间戳的起点,为什么?

1969年UNIX第一个版本发布, 第一个版本的 Unix time 用一个32位整数存储,基于硬件60Hz的时间计数。

1971年11月3号出版的《Unix Programmer’s Manual》第一版里定义了 UNIX TIME 以 1971年1月1日00:00:00 作为起始时间,每秒增长60。

后来考虑到32位整数的范围,如果每秒增长60个数字,则两年半就会循环一轮了。

于是改成了1Hz时间计数。这个循环周期大约有136年之久,就不在乎起始时间是1970还是1971年了,于是为了人工记忆和计算的方便就改为了1970年。

补充:因为 UNIX TIME 是一个有符号整数,所以1970年前一百年可以用其负数部分表示。但事实上很少这样使用。UNIX TIME 主要用来表示当前时间或者和电脑有关的日志时间。考虑到所有电脑文件不可能在1970年前创立,所以用 UNIX TIME 很少用来表示1970前的时间。当需要表示以前的时间,一般就是自己定义数据结构。比如你可以用几个数分别表示年月日。

4.Python中的’__init__()’和’__del__()’

创建对象后,python解释器默认调用“__init__()”方法;
当删除一个对象时,python解释器也会默认调用一个方法,这个方法为“__del__()”方法,但是并不是每次删除对象都会调用该方法。

__init__()见得比较多,这里只特别说明一下__del__(),以代码为例:

import time

class Animal(object):

    def __init__(self, name):
        print('__init__方法被调用')
        self.__name = name

    def __del__(self):
        print("__del__方法被调用")
        print("%s对象马上被干掉了..." % self.__name)

# 创建对象
dog = Animal("哈皮狗")
# 删除对象
del dog

cat = Animal("波斯猫")
cat2 = cat

print("马上 删除cat对象")
del cat

print("马上 删除cat2对象")
del cat2

print("程序2秒钟后结束")
time.sleep(2)

对于上面这段程序,它的输出结果为:

__init__方法被调用
__del__方法被调用
哈皮狗对象马上被干掉了…
__init__方法被调用
马上 删除cat对象
马上 删除cat2对象
__del__方法被调用
波斯猫对象马上被干掉了…
程序2秒钟后结束

我们注释掉下面这段程序:

# del cat2

得到如下结果:

__init__方法被调用
__del__方法被调用
哈皮狗对象马上被干掉了…
__init__方法被调用
马上 删除cat对象
马上 删除cat2对象
程序2秒钟后结束
__del__方法被调用
波斯猫对象马上被干掉了…

加入我们把所有的del语句注释掉:

# del dog
# del cat
# del cat2

又会得到如下结果:

__init__方法被调用
__init__方法被调用
马上 删除cat对象
马上 删除cat2对象
程序2秒钟后结束
__del__方法被调用
哈皮狗对象马上被干掉了…
__del__方法被调用
波斯猫对象马上被干掉了…

由此,我们可以得到”__del__()”调用的逻辑:

执行del之后如果引用计数等于0,则会立即调用__del__()。 - - - - >对应于示例1中的 del dog
执行del之后如果引用计数不等于0,则会在所有程序执行完后自动调用__del__()。- - - - >对应于示例2
如果没有del语句,当所有的程序执行完之后,__del__()会自动被调用,用来清理实例对象,回收内存。- - - - >对应于示例3

5. str.format() 函数

大多数情况下,str.format()和格式化操作符功能相似,这个总结得不错:str.format() 函数

6.未完待续…
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python小知识点总结 的相关文章

  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • LeetCode 最热 100 题, 搜索旋转排序数组,search in rotated sorted array

    作者 Linux猿 简介 CSDN博客专家 华为云享专家 Linux C C 面试 刷题 算法尽管咨询我 关注我 有问题私聊 关注专栏 LeetCode面试必备100题 优质好文持续更新中 欢迎小伙伴们点赞 收藏 留言 目录 一 题目描述
  • 自然语言编程的尝试

    班上有30个学生 甲叫肖鹤云 乙叫李诗情 显示甲 乙的名字 这段代码明显不能运行 需要做一些修改 分配30个学生类至班 甲为班 0 乙为班 1 甲的名字为肖鹤云 乙的名字为李诗情 显示甲的名字 乙的名字 进一步转化 学生类 班 学生类 ma
  • 杨辉三角c语言实现

    在屏幕上打印杨辉三角 include
  • Spring Boot实战.Spring Boot核心原理剖析

    在上节中我们通过了一个小的入门案例已经看到了Spring Boot的强大和简单之处 本章将详细介绍Spring Boot的核心注解 基本配置和运行机制 笔者一直认为 精通一个技术一定要深入了解这个技术帮助我们做了哪些动作 深入理解它底层的运
  • VMware Workstation(虚拟机)安装英文版XP系统

    因需要写英文文档 里面的截图也要求全英文 所以打算在在原有的XP系统上安装一虚拟机 再在虚拟机里安装英文版XP系统 在此记录一下自己的安装过程 虚拟机的安装过程在此略过 首先要下载英文版XP操作系统iso镜像 本人下载网址 http www
  • pytorch实现简易回归问题

    代码部分 import torch from torch autograd import Variable import torch nn as nn import torch nn functional as F import torch
  • Excel中如何获取汉字拼音首字母

    Excel中如何获取汉字拼音首字母 在工作中 为了方便查询 排序或者编码 需要生成汉字内容信息的首字母 如果信息很多的话 一个个录入是一件很麻烦的事情 下面给大家介绍一个便捷的方法 轻松获取汉字拼音首字母信息 最终效果如下 工具 原料 Mi
  • vue3中使用webcamjs拍照

    最近做了一个考试答题的pc端vue3项目 就是pc端有人脸识别这个流程 于是熟悉了下 附上官方文档地址 https www npmjs com package webcamjs 一 第一步下载 npm i webcamjs 二 vue3中引
  • React如何使用styled-component

    首先需要安装style component 在控住台输入npm install styled component save 全局如何使用呢 在index js中引入style js 以下是style js中的代码 其中使用了reset cs
  • 【数学】张量通俗入门

    1 张量 张量就是一组有序数 或者说 张量就是一组有序数的表现方式 或者说是记号 比如向量是一种表现方式 矩阵是一种表现方式 张量同样也是一种表现方式 它本质就是一组有序的数字而已 值得指出的是 张量是比向量和矩阵更高级的记号 它向下包含了
  • 射频功率衰减器一般采用电阻元件,有两种主要电路形式:π型和T型

    射频功率衰减器一般采用电阻元件 有两种主要电路形式 型和T型 工具下载 https download csdn net download xingqingly 12921701 1 型 输入阻抗和输出阻抗50欧姆
  • STM32中iic驱动mpu6050例程

    一 mpu6050寄存器相关知识 1 本机地址 可在寄存器使用手册查找 mpu6050在iic中是七位地址 Bit6 Bit1是他的前六位地址 默认是110100 末位由AD0引脚的值确定 并不是该寄存器的Bit0位 若AD0引脚置0 则m
  • 电赛需知

    电赛是大学生活里一个很好锻炼自己的机会 电赛前需要规划好电赛期间的几天生活 要撰写好方案 坚定信念 要注意饮食 电赛一般三到五人组队 需要很好的协作能力 较强的沟通能力 参赛期间难免会有争议 不要好高骛远 不要中途改方案
  • 部署langchain+chatglm

    先参考 window零基础部署langchain ChatGLM 飞奔的屎壳郎的博客 CSDN博客 安装一部分 1 GCC安装 gcc64位下载 一定要装64位的gcc 因为我的电脑是w10 64位的 装32位运行langchain报错并配
  • 在android studio下怎么引入android framework来使用隐藏的api

    在eclipse上很容易引入自己编译的android framework来使用系统隐藏的API 在android studio上就有点麻烦了 在gradle 1 0以前可以设置Provided编译属性来支持编译但不打包到dex里面 可是在新
  • 使用JS获得IP地址及其归属

    相关的API接口 ip 获取自己IP https api ip sb ip ip 获取自己IP https api ipify org 获取自己IP以及归属 https api ip sb geoip ip api com 接口 http
  • String 字符串 转为字符数组

    推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画 AI讲话 翻译 GPU点亮AI想象空间 资源分享 史上最全文档AI绘画stabledif
  • Csharp:The .dat File using BinaryReader and BinaryWriter Convert to DataTable

  • Css3透明、background-size 属性

    background size length percentage cover contain 值 描述 测试 length 设置背景图像的高度和宽度 第一个值设置宽度 第二个值设置高度 如果只设置一个值 则第二个值会被设置为 auto 测
  • Python小知识点总结

    1 super 在类的继承中 如果重定义某个方法 该方法会覆盖父类的同名方法 但有时 我们希望能同时实现父类的功能 这时 我们就需要调用父类的方法了 可通过使用 super 来实现 class Animal object def init