# 传统方式
result = []
for i in range(10):
if i % 2 == 0:
result.append(i**2)
# 列表推导式
result = [i**2 for i in range(10) if i % 2 == 0]
✅ 更简洁,且通常执行更快(C语言层面优化)。
# 低效
max_value = 0
for num in numbers:
if num > max_value:
max_value = num
# 高效
max_value = max(numbers)
👉 内置函数如 map()、filter()、sum() 等都是用C实现的,速度远超手动循环。
# 列表(占用全部内存)
data = [x**2 for x in range(1000000)]
# 生成器(惰性计算,节省内存)
data_gen = (x**2 for x in range(1000000))
🚀 用 () 代替 [] 创建生成器,适合流式数据处理。
join() 拼接字符串# 低效(每次拼接创建新对象)
result = ""
for s in string_list:
result += s
# 高效
result = "".join(string_list)
📌 字符串不可变,频繁拼接会产生大量临时对象。
def calculate():
# 将频繁访问的全局变量转为局部变量
local_func = some_heavy_function
for i in range(10000):
local_func(i)
⚡ 局部变量存储在栈中,访问速度比全局变量快。
in 检查成员存在性# 低效(列表遍历)
if value in my_list: # O(n)
# 高效(集合/字典)
if value in my_set: # O(1)
🔍 对频繁查找的操作,优先使用 set 或 dict。
collections 模块from collections import defaultdict, Counter
# 自动初始化字典
dd = defaultdict(list)
dd[key].append(value)
# 快速计数
counts = Counter(iterable)
🎯 这些专门的数据结构经过优化,比手动实现更高效。
# 使用 lru_cache 自动缓存函数结果
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
💡 适合递归函数或计算成本高的纯函数。
cProfile 找出瓶颈:python -m cProfile your_script.py
timeit 测量代码片段:import timeit
timeit.timeit('your_code()', setup='from __main__ import your_code', number=1000)
numpy、pandas(向量化计算)或 Cython。这些技巧能应对大多数常见场景,但实际优化前建议先通过性能分析定位真正瓶颈!