import math# 慢:每次都查全局作用域def slow(): result = [] for i in range(10000): result.append(math.sqrt(i))# 快:局部变量查找更快(LOAD_FAST vs LOAD_GLOBAL)def fast(): sqrt = math.sqrt # 缓存到局部变量 result = [] append = result.append # 方法也可以缓存 for i in range(10000): append(sqrt(i))
2. 列表推导式 vs 循环
# 列表推导式通常比等价的 for 循环快 30-50%# 推导式在 C 层面运行,没有 Python 层循环开销# 慢result = []for x in range(1000): if x % 2 == 0: result.append(x * x)# 快result = [x * x for x in range(1000) if x % 2 == 0]
3. 字符串拼接
# 慢:每次 + 都创建新字符串,O(n²)s = ""for word in words: s += word# 快:join 一次性分配,O(n)s = "".join(words)
4. 使用 in 检测成员
# list 成员检测:O(n)if x in [1, 2, 3, 4, 5]: # 慢 ...# set/dict 成员检测:O(1)lookup = {1, 2, 3, 4, 5}if x in lookup: # 快 ...
5. 避免重复计算
# 慢:每次循环都重新计算 lenfor i in range(len(my_list)): ...# 快:缓存长度n = len(my_list)for i in range(n): ...
NumPy 向量化
import numpy as np# 慢:Python 循环def python_sum(arr): total = 0 for x in arr: total += x * x return total# 快:NumPy 向量化(底层 C,且释放 GIL)def numpy_sum(arr): return np.sum(arr ** 2)arr = np.arange(10**6)# numpy 版本快 100x+