以下是最常用且能显著提升代码质量的 Pythonic 写法:
一、遍历与循环类
- enumerate() 替代 range(len())
需要同时获取索引和元素时,用 enumerate 更简洁,还可指定起始索引 :
pythonfor i, item in enumerate(items, start=1):
print(f"{i}: {item}") - zip() 并行迭代多个序列
避免手动索引多个列表 :
pythonfor name, score in zip(names, scores):
print(name, score) - itertools.product() 扁平化嵌套循环
遍历多个可迭代对象的笛卡尔积时避免多层嵌套 。
二、推导式与生成器
- 列表推导式替代 for 循环
声明式地创建列表,更简洁且往往更快 :
pythonsquares = x**2 for x in range(10) if x % 2 == 0
还有字典推导式 {x: x** 2 for x in range(5)}、集合推导式等 。
- 生成器表达式处理大数据
把方括号换成圆括号实现惰性求值,避免一次性生成整个列表、节省内存 :
pythonsum(x2 for x in range(106))
三、赋值与解包
- 多重赋值与变量交换
无需临时变量即可交换 :
pythona, b = b, a
- 星号解包
捕获序列的首尾和中间部分 :
pythonfirst, *middle, last = 1, 2, 3, 4, 5
四、语法特性
- f-string 格式化字符串
Python 3.6+ 引入,直观且支持表达式和高级格式控制 :
pythonprint(f"Pi is ~ {pi:.2f}")
- 海象运算符(:=,Python 3.8+)
在表达式内部完成赋值,简化循环和条件判断 :
pythonwhile (line := file.read()):
process(line)
- 链式比较与三元表达式
pythonif 18 <= age < 60: ... # 链式比较
result = "big" if x > 10 else "small" # 三元
五、资源与安全访问
- with 语句管理资源
文件等资源自动关闭,即使发生异常也能清理 :
pythonwith open('file.txt') as f:
content = f.read()
- 字典安全访问
用 get() 或 defaultdict 避免 KeyError :
pythonvalue = my_dict.get("key", "default")
六、其他实用技巧
any() / all():一行替代整个检查循环
字典合并:Python 3.9+ 可用 | 运算符合并字典,也可用 {**d1, **d2}
set 做成员查找:集合查找是 O(1),比列表 O(n) 快
collections.Counter:高效计数
pathlib:跨平台路径处理,如 Path("data") / "file.txt"
join() 拼接字符串:比 + 拼接效率高约 3 倍
函数命名用 snake_case 而非 camelCase,符合 PEP 8 规范
⚠️ 注意事项
可读性第一:如果某个技巧反而让代码难懂,就应选择更明确的写法
注意版本:海象运算符需 Python 3.8+,字典合并 | 需 3.9+,f-string 需 3.6+
Lambda 局限:只适合简单表达式,复杂逻辑应使用 def 定义常规函数
避免可变默认参数:函数默认参数不要用 \[\] 或 {},应设为 None 再在函数内初始化 。
总体而言,这些技巧虽小,但能在日常开发中显著提升代码的可读性、健壮性和性能 。