Python 写起来简单,但写得好和写得快是两回事。很多开发者停留在“能跑就行”的阶段,代码冗长、效率低下。下面十个技巧,每一个都能让你的代码更短、更快、更 Pythonic。
1. 列表推导式替代循环 append
# 不推荐 squares = [] for i in range(10): squares.append(i i) # 推荐 squares = [i i for i in range(10)]
列表推导式不仅少两行,执行速度也更快。加上条件判断同样简洁:[x for x in data if x > 0]。字典和集合也有对应的推导式。
2. 用 enumerate 同时取索引和值
for index, value in enumerate(items, start=1): print(index, value)
不要再写range(len(items))然后items[i],enumerate 更清晰,也避免了手动维护计数器。
3. zip 并行遍历多个序列
names = ['Alice', 'Bob'] ages = [25, 30] for name, age in zip(names, ages): print(f'{name}: {age}')zip 把多个列表按位置配对,代码量减半。需要同时遍历字典的键和值时,用dict.items()即可。
4. f-string 格式化字符串
name = 'Tom' score = 95.5 print(f'{name} 的成绩是 {score:.1f}')f-string 比%和format()更直观,支持表达式和格式说明符,性能也更好。Python 3.8 之后还支持f'{x=}'直接输出变量名和值,调试非常方便。
5. 上下文管理器自动管理资源
with open('data.txt', 'r', encoding='utf-8') as f: content = f.read()文件、锁、数据库连接都应该用with。它会自动释放资源,即使中途抛异常也不会泄漏。自己实现上下文管理器只需定义__enter__和__exit__,或者用contextlib.contextmanager装饰器。
6. collections 模块的宝藏
defaultdict省去初始化判断:
from collections import defaultdict word_count = defaultdict(int) for word in words: word_count[word] += 1
Counter直接统计频次,deque提供高效的两端队列,namedtuple让元组有字段名。这些工具能省掉大量手写逻辑。
7. 生成器处理大数据
def read_large_file(path): with open(path) as f: for line in f: yield line.strip()
生成器不一次性加载所有数据,内存占用极低。用yield替代返回列表,处理日志、CSV 等大文件时效果显著。生成器表达式(x for x in data)同样惰性求值。
8. 装饰器复用逻辑
import time from functools import wraps def timer(func): @wraps(func) def wrapper(args, kwargs): start = time.time() result = func(args, kwargs) print(f'{func.__name__} 耗时 {time.time() start:.3f}s') return result return wrapper @timer def slow_task(): time.sleep(1)装饰器把日志、计时、重试、权限校验等横切逻辑抽离出来,业务函数保持干净。functools.wraps保留原函数元信息,别漏掉。
9. 解包让赋值更灵活
a, b = 1, 2 first, rest = [1, 2, 3, 4] head, middle, tail = [1, 2, 3, 4, 5]
交换变量a, b = b, a不需要临时变量。函数返回多个值时,解包让调用方一目了然。星号解包还能合并列表:[list1, list2]。
10. itertools 处理复杂迭代
from itertools import chain, groupby, combinations # 拼接多个可迭代对象 for item in chain(list1, list2): ... # 组合 for pair in combinations([1, 2, 3], 2): print(pair) # (1,2) (1,3) (2,3)
itertools提供了大量高效迭代工具,包括无限序列、笛卡尔积、分组等。需要复杂迭代逻辑时,先查查它,往往有现成方案。
结语
这十个技巧的共同点是:用语言特性替代手工劳动。它们不涉及高深算法,但能实实在在减少代码量、提升可读性和性能。建议从今天起,每写一段代码就问自己:有没有更 Pythonic 的写法?坚持一个月,你的代码风格会有质的飞跃。