66个有趣的Python冷知识
-
生成随机浮点数
random.uniform(a, b)
生成区间[a, b]
之间的随机浮点数。
-
反向枚举
- 使用
reversed()
和enumerate()
可以反向枚举列表。
- 使用
-
单元测试装饰器
unittest
提供了@unittest.skip
装饰器用于跳过测试。
-
动态类型
- Python是动态类型语言,可以在运行时改变变量类型。
-
类型注释
- 使用类型注释
def func(x: int) -> str:
可以增强代码可读性和静态分析。
- 使用类型注释
-
二进制I/O
- 使用
'rb'
和'wb'
模式打开文件进行二进制读写。
- 使用
-
数据类默认值
- 在数据类中可以为字段指定默认值
field(default=...)
。
- 在数据类中可以为字段指定默认值
-
优雅退出
- 使用
atexit
模块可以注册退出时要执行的函数。
- 使用
-
上下文管理器
- 使用
contextlib.closing
可以为非上下文管理器对象提供上下文管理功能。
- 使用
-
复数支持
- Python内置支持复数,使用
complex(real, imag)
创建。
- Python内置支持复数,使用
-
多进程日志
multiprocessing.get_logger()
获取多进程安全的日志记录器。
-
文件权限
- 使用
os.chmod(path, mode)
改变文件权限。
- 使用
-
时间戳转换
- 使用
datetime.fromtimestamp()
将时间戳转换为日期时间对象。
- 使用
-
UUID生成
- 使用
uuid.uuid4()
生成随机UUID。
- 使用
-
弱引用字典
weakref.WeakKeyDictionary
和weakref.WeakValueDictionary
提供了弱引用字典。
-
链式映射
collections.ChainMap
提供了多个字典的链式映射视图。
-
延迟属性计算
- 使用
functools.cached_property
实现延迟属性计算。
- 使用
-
递归限制
- 使用
sys.getrecursionlimit()
和sys.setrecursionlimit(limit)
获取和设置递归深度限制。
- 使用
-
字典视图
dict.keys()
,dict.values()
,dict.items()
提供了字典视图。
-
字节操作
int.to_bytes()
和int.from_bytes()
提供了整数与字节之间的转换。
-
动态类创建
- 使用
type()
可以动态创建类。
- 使用
-
字符串常量
string
模块提供了各种字符串常量,例如string.ascii_letters
,string.digits
.
-
带默认值的字典
- 使用
collections.defaultdict
创建带默认值的字典。
- 使用
-
模块级别文档
- 使用
__doc__
为模块编写文档字符串。
- 使用
-
属性代理
- 使用
property()
函数可以创建代理属性。
- 使用
-
单例模式
- 使用元类可以实现单例模式。
-
正则表达式分组
- 使用命名分组
(?P<name>pattern)
提高正则表达式的可读性。
- 使用命名分组
-
自定义字符串格式化
- 使用
str.format_map()
自定义字符串格式化行为。
- 使用
-
时间差计算
- 使用
datetime.timedelta
计算时间差。
- 使用
-
性能计数器
- 使用
time.perf_counter()
获取高精度性能计数器。
- 使用
-
带索引的列表解析
- 使用
enumerate()
在列表解析中同时获取索引和值。
- 使用
-
类方法工厂
- 使用
@classmethod
装饰器定义类方法工厂。
- 使用
-
动态属性
- 使用
__getattr__
动态地获取属性。
- 使用
-
命名元组默认值
- 使用
_replace
方法和_fields_defaults
属性设置命名元组的默认值。
- 使用
-
按位运算
- 使用
&
,|
,^
,~
,<<
,>>
进行按位运算。
- 使用
-
反转字典
- 使用字典推导式反转字典的键和值
{v: k for k, v in my_dict.items()}
。
- 使用字典推导式反转字典的键和值
-
无序集合
frozenset
提供了不可变集合类型。
-
对象复制
- 使用
copy.copy()
和copy.deepcopy()
进行浅复制和深复制。
- 使用
-
元类控制实例创建
- 使用元类可以控制类的实例创建过程。
-
自定义迭代器
- 实现
__iter__
和__next__
方法定义自定义迭代器。
- 实现
-
线程局部数据
threading.local()
提供了线程局部数据存储。
-
动态修改类
- 可以在运行时动态添加或修改类的方法和属性。
-
异步上下文管理器
- 使用
async with
实现异步上下文管理器。
- 使用
-
异步生成器
- 使用
async def
和yield
定义异步生成器。
- 使用
-
无锁并发
- 使用
queue.Queue
实现线程安全的无锁并发编程。
- 使用
-
命令行进度条
- 使用
tqdm
模块创建命令行进度条。
- 使用
-
文件系统路径操作
os.path
模块提供了跨平台的文件系统路径操作。
-
临时文件和目录
tempfile
模块提供了创建临时文件和目录的功能。
-
解析URL
- 使用
urllib.parse
解析和构建URL。
- 使用
-
执行shell命令
- 使用
subprocess
模块执行shell命令。
- 使用
-
HTTP请求
http.client
模块提供了HTTP客户端功能。
-
WebSocket
websockets
模块提供了WebSocket客户端和服务器功能。
-
任务调度
- 使用
sched
模块调度任务。
- 使用
-
时间度量
timeit
模块提供了测量小段代码执行时间的功能。
-
跨平台
- Python是跨平台的,支持Windows、Mac和Linux。
-
高阶函数
map()
,filter()
,reduce()
提供了高阶函数。
-
类型转换
- 使用
int()
,float()
,str()
,list()
,tuple()
,set()
,dict()
进行类型转换。
- 使用
-
生成随机字符串
- 使用
secrets
模块生成安全的随机字符串。
- 使用
-
静态文件服务器
- 使用
http.server
模块快速启动一个静态文件服务器。
- 使用
-
动态导入模块
- 使用
importlib.import_module()
动态导入模块。
- 使用
-
多线程
- 使用
threading.Thread
创建和管理线程。
- 使用
-
多进程
- 使用
multiprocessing.Process
创建和管理进程。
- 使用
-
生成器表达式
- 使用生成器表达式
(x*x for x in range(10))
节省内存。
- 使用生成器表达式
-
自定义异常
- 通过继承
Exception
类定义自定义异常。
- 通过继承
-
魔术方法
- 实现
__str__
,__repr__
,__len__
,__getitem__
,__setitem__
等魔术方法增强类的功能。
- 实现
-
测试覆盖率
- 使用
coverage
模块测量测试覆盖率。
- 使用