Python代码优化技巧:列表推导与局部变量
请列出至少6个Python代码性能优化技巧,并说明每种优化的原理和效果。
回答
小字辈
-
列表推导式替代for循环:
[x**2 for x in range(1000)]比for循环快约2倍(C级别内部迭代) -
局部变量加速: 在函数内将全局变量赋值给局部变量,如
local_sum = sum,避免全局查找(Python LEGB规则中局部查找最快) -
字符串拼接用join:
''.join(list_of_strings)比+=累加快得多(+=每次创建新字符串,O(n²)) -
__slots__减少内存:class Point: __slots__ = ('x', 'y') # 避免__dict__,节省约50%内存适合大量实例场景(如游戏实体、数据记录)
-
map/filter替代循环(函数式场景):
list(map(func, iterable))在函数已定义时稍快于列表推导 -
使用缓存:
@functools.lru_cache缓存纯函数结果,避免重复计算 -
选择合适的数据结构:
- 频繁查找用
set/dict(O(1))替代list(O(n)) deque替代list做队列操作(O(1) vs O(n))
- 频繁查找用
-
尽量用局部变量缩短属性访问链:
obj.attr.method()改为m = obj.attr.method; m()