1. 循环内的操作
- 规范操作:避免在循环内部进行重复的、不必要的计算。例如,如果一个计算结果在每次循环中都不会改变,应将其移到循环外部。
- 原因:每次循环都进行相同的计算会浪费大量时间,移到循环外只计算一次可显著提升性能。例如:
# 不规范
for i in range(1000):
result = math.sqrt(25) # 每次循环都计算相同结果
# 规范
sqrt_25 = math.sqrt(25)
for i in range(1000):
result = sqrt_25
2. 数据结构选择
- 规范操作:根据实际需求选择合适的数据结构。比如,需要频繁查找元素时,使用
dict
或 set
而非 list
。
- 原因:
list
的查找时间复杂度为 O(n),而 dict
和 set
的查找时间复杂度为 O(1),在数据量较大时性能差异明显。例如查找元素 x
:
my_list = [1, 2, 3, 4, 5]
if x in my_list: # 时间复杂度 O(n)
my_set = {1, 2, 3, 4, 5}
if x in my_set: # 时间复杂度 O(1)
3. 不必要的函数调用
- 规范操作:减少在性能关键部分的不必要函数调用。
- 原因:函数调用有一定开销,包括参数传递、栈操作等。如果函数体简单,内联代码可能比函数调用更高效。例如:
# 不规范
def add(a, b):
return a + b
for i in range(1000):
result = add(i, 1)
# 规范
for i in range(1000):
result = i + 1
4. 变量作用域
- 规范操作:尽量减少使用全局变量,尤其是在性能敏感的代码段。
- 原因:访问全局变量比访问局部变量慢,因为解释器需要在更大的命名空间中查找。例如:
global_var = 10
def func():
# 不规范,访问全局变量
result = global_var + 5
return result
def better_func():
local_var = 10
# 规范,访问局部变量
result = local_var + 5
return result
5. 代码缩进(一般不直接影响性能,但影响可读性进而影响维护和优化)
- 规范操作:遵循一致的代码缩进,通常使用4个空格。
- 原因:虽然缩进本身不直接影响性能,但清晰的缩进结构能让代码逻辑一目了然,便于发现性能瓶颈并进行优化。如果代码缩进混乱,难以阅读和理解,优化工作会变得困难。