66个有趣的Python冷知识
-
装饰器的参数
- 装饰器可以接受参数,返回一个新的装饰器。
-
计时上下文管理器
- 可以使用
contextlib.contextmanager
创建一个计时器上下文管理器。
- 可以使用
-
命名空间
dir()
可以列出当前命名空间中的所有名称。
-
内置函数
enumerate()
可以同时获取列表元素的索引和值。
-
任意迭代器
- 迭代器协议由
__iter__()
和__next__()
方法定义。
- 迭代器协议由
-
生成器表达式
- 生成器表达式使用括号而不是方括号,例如
(x*x for x in range(10))
。
- 生成器表达式使用括号而不是方括号,例如
-
上下文管理器装饰器
- 使用
contextlib.contextmanager
可以将生成器函数转换为上下文管理器。
- 使用
-
自定义异常
- 可以通过继承
Exception
类定义自定义异常。
- 可以通过继承
-
浮点数相等性
- 由于浮点数精度问题,通常不直接比较相等性,而是使用
math.isclose()
。
- 由于浮点数精度问题,通常不直接比较相等性,而是使用
-
字符串模板
string
模块的Template
类提供了另一种字符串格式化方法。
-
命名参数
- 可以使用命名参数传递给函数,例如
func(a=1, b=2)
。
- 可以使用命名参数传递给函数,例如
-
函数对象属性
- 函数是对象,可以有属性,例如
func.description = "This is a function"
。
- 函数是对象,可以有属性,例如
-
多行注释
- 可以使用多个单行注释来实现多行注释。
-
属性动态获取
getattr()
可以动态获取对象属性。
-
属性动态设置
setattr()
可以动态设置对象属性。
-
调用对象
- 实现
__call__
方法的对象可以像函数一样调用。
- 实现
-
私有属性
- 使用双下划线前缀定义私有属性,例如
self.__private
.
- 使用双下划线前缀定义私有属性,例如
-
运算符重载
- 可以通过实现魔术方法重载运算符,例如
__add__
,__sub__
.
- 可以通过实现魔术方法重载运算符,例如
-
序列协议
- 实现
__len__
和__getitem__
方法可以创建自定义序列。
- 实现
-
上下文管理器协议
- 实现
__enter__
和__exit__
方法创建自定义上下文管理器。
- 实现
-
自定义容器
- 实现
__contains__
,__iter__
,__len__
方法创建自定义容器。
- 实现
-
对象哈希
__hash__
方法定义对象的哈希值。
-
字符串比较
__eq__
,__lt__
,__le__
,__gt__
,__ge__
方法定义对象比较。
-
对象拷贝
- 使用
copy
模块的copy()
和deepcopy()
方法进行对象拷贝。
- 使用
-
文件读写模式
open()
函数支持多种文件读写模式,例如'r'
,'w'
,'a'
,'b'
.
-
带编码的文件
open()
函数支持指定文件编码,例如open('file.txt', 'r', encoding='utf-8')
.
-
临时目录
tempfile.TemporaryDirectory
创建一个临时目录,在使用完毕后自动删除。
-
命令行输入
input()
函数可以读取命令行输入。
-
格式化字符串
- 使用 f-string 可以在字符串中直接插入表达式值,例如
f"Value: {x}"
.
- 使用 f-string 可以在字符串中直接插入表达式值,例如
-
环境上下文
- 使用
os.environ
可以访问和修改环境变量。
- 使用
-
动态导入模块
- 使用
importlib
模块可以动态导入模块。
- 使用
-
日期运算
datetime.timedelta
提供了日期时间运算功能。
-
日历模块
calendar
模块提供了日历相关功能。
-
可调用对象
- 实现
__call__
方法的对象可以被调用。
- 实现
-
类属性
- 类属性在类定义时初始化,所有实例共享。
-
实例属性
- 实例属性在实例初始化时定义,每个实例独立。
-
类方法
- 使用
@classmethod
装饰器定义类方法。
- 使用
-
私有方法
- 使用双下划线前缀定义私有方法。
-
文档生成
pydoc
模块提供了生成文档的功能。
-
反射
- 使用
inspect
模块可以反射对象信息。
- 使用
-
单元测试发现
unittest
模块支持自动发现测试用例。
-
断言
unittest
提供了多种断言方法,例如assertEqual
,assertTrue
.
-
随机样本
random.sample
从序列中随机抽取样本。
-
正态分布
random.gauss
生成正态分布随机数。
-
唯一标识
uuid
模块生成唯一标识符。
-
密码学
hashlib
模块提供了哈希算法。
-
HMAC
hmac
模块提供了HMAC算法。
-
进程池
multiprocessing.Pool
提供了进程池功能。
-
线程池
concurrent.futures.ThreadPoolExecutor
提供了线程池功能。
-
生成器
- 使用
yield
关键字定义生成器函数。
- 使用
-
异步生成器
- 使用
async def
和yield
定义异步生成器。
- 使用
-
队列
queue.Queue
提供了线程安全的队列实现。
-
优先级队列
queue.PriorityQueue
提供了优先级队列。
-
双向队列
collections.deque
提供了双向队列。
-
计数器
collections.Counter
提供了计数器。
-
默认字典
collections.defaultdict
提供了带有默认值的字典。
-
有序字典
collections.OrderedDict
提供了有序字典。
-
数据类
- 使用
dataclasses
模块可以定义数据类。
- 使用
-
命名元组
collections.namedtuple
提供了命名元组。
-
函数缓存
functools.lru_cache
提供了函数缓存功能。
-
方法缓存
functools.cache_property
提供了属性缓存功能。
-
部分函数
functools.partial
提供了部分函数应用。
-
方法封装
functools.wraps
用于装饰器,保留原函数的元数据。
-
压缩数据
bz2
,gzip
,zipfile
模块提供了数据压缩功能。
-
消息队列
queue.Queue
提供了消息队列。
-
异步迭代器
- 实现
__aiter__
和__anext__
方法定义异步迭代器。
- 实现