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 与 Windows 控制台应用程序交互

    我在 Windows 上使用 python 2 5 我希望通过 Popen 与控制台进程交互 我目前有一小段代码 p Popen console app exe stdin PIPE stdout PIPE issue command 1
  • 更改 Inkscape 的 Python 解释器

    在使用 Inkscape 时 我不断收到错误 这似乎意味着未满足 python 2 vs 3 的期望 尽管我已经安装了它们 例如 当我尝试从模板生成新文档时 我得到 Traceback most recent call last File
  • Python:多处理和请求

    以下是我正在运行的使用多处理并行触发 HTTP 请求的代码片段 在控制台上运行后 它挂在 requests get url 处 既不继续前进也不抛出错误 def echo 100 q print before r requests get
  • 如何配置散景图以具有响应宽度和固定高度

    我使用通过组件功能嵌入的散景 实际上我使用 plot sizing mode scale width 它根据宽度进行缩放并保持纵横比 但我想要一个响应宽度但固定或最大高度 这怎么可能实现呢 有stretch both and scale b
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 在一张图中同时绘制两个截面强度

    我有一个形状数组 512 512 看起来像 行 x 列 y 密度 z 数组的数量 0 012825 0 020408 0 022976 0 015938 0 02165 0 024357 0 036332 0 031904 0 025462
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • python 语言环境奇怪的错误。这究竟是怎么回事?

    所以今天我升级到了 bazaar 2 0 2 我开始收到这条消息 顺便说一句 我在雪豹上 bzr warning unknown locale UTF 8 Could not determine what text encoding to
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • 如何在Python中获取绝对文件路径

    给定一条路径 例如 mydir myfile txt 如何在Python中找到文件的绝对路径 例如 在 Windows 上 我最终可能会得到 C example cwd mydir myfile txt gt gt gt import os
  • Scrapy - 不会爬行

    我正在尝试运行递归爬行 由于我编写的爬行不能正常工作 因此我从网络上提取了一个示例并进行了尝试 我真的不知道问题出在哪里 但是爬行没有显示任何错误 谁能帮我这个 另外 是否有任何逐步调试工具可以帮助理解蜘蛛的爬行流程 非常感谢任何与此相关的
  • 如何从c++调用python

    我是Python新手 我尝试像这样从 C 调用 python 脚本 在 Raspberry Pi 中 std string pythonCommand python Callee py a b int res system pythonCo
  • pandas apply:函数名是否带引号的区别

    简单数据框定义示例 df pd DataFrame A 2 4 1 B 8 4 1 C 6 2 7 df A B C 0 2 8 6 1 4 4 2 2 1 1 7 尝试理解以下块中函数参数调用的差异 df apply sum df app
  • 从 subprocess.Popen 获取整个输出

    我通过调用 subprocess Popen 得到了一个有点奇怪的结果 我怀疑这与我对 Python 的陌生有很大关系 args cscript USERPROFILE tools jslint js USERPROFILE tools j
  • Pandas - 分割大的Excel文件

    我有一个大约有 500 000 行的 Excel 文件 我想将其拆分为多个 Excel 文件 每个文件有 50 000 行 我想用熊猫来做 这样它会是最快和最简单的 有什么想法如何制作吗 感谢您的帮助 假设您的 Excel 文件只有一个 第
  • 通过子类化 `io.TextIOWrapper` 来子类化文件 - 但它的构造函数有什么签名?

    我正在尝试子类化io TextIOWrapper下列的这个帖子 https stackoverflow com a 23796737 974555 虽然我的目标不同 以此开始 注意 动机 https stackoverflow com a
  • 如何获取所有Python标准库模块的列表?

    我想要类似的东西sys builtin module names标准库除外 其他不起作用的事情 sys modules 只显示已经加载的模块 sys prefix 包含非标准库模块并且似乎无法在 virtualenv 内工作的路径 我想要这
  • 使用Python的timeit获取“全局名称'foo'未定义”

    我想知道执行一条Python语句需要多少时间 所以我上网查了一下 发现标准库提供了一个名为timeit http docs python org library timeit html旨在做到这一点 import timeit def fo

随机推荐

  • 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