代码优化是提高Python程序性能的有效方式。主要有以下几种方法:
1. 使用更高效的数据结构:
- 列表查询:用集合代替列表,可以提高查询效率。
- 字典查询:使用defaultdict可以避免KeyError。
- 用pandas DataFrame和Series替换纯列表。
例如:
import collections
import pandas as pd
list1 = [1, 2, 6, 4, 2, 3, 2]
# 普通列表查询
list1.count(2)
# 使用集合
set1 = set(list1)
list1.count(2)
# 使用defaultdict避免KeyError
dd = collections.defaultdict(int)
for k in list1:
dd[k] += 1
dd[2]
# 使用pandas
df = pd.DataFrame({'col1': [1, 2, 6, 4, 2, 3, 2]})
df['col1'].value_counts()[2]
2. 避免不必要的计算:
- 缓存计算结果。
- 用生成器表达式代替列表推导可以延迟计算。
- 尽量避免在循环中进行过多计算,将计算结果存入中间变量。
例如:
# 列表推导进行过多计算
result = [x*2 for x in range(1000000)]
# 使用生成器表达式延迟计算
result = (x*2 for x in range(1000000))
# 缓存结果,避免重复计算
cache = {}
def fib(n):
if n in cache:
return cache[n]
cache[n] = fib(n-1) + fib(n-2)
return cache[n]
3. 避免过度优化:
- 不要在循环中进行过度优化。
- 要在正确的地方进行优化,避免影响代码可读性。
- 要进行性能测试,确定哪些部分是真正需要优化的代码。
例如:
# 不要在循环内进行过度优化
list1 = [1, 2, 3]
sum = 0
for i in list1:
sum += i # 简单的求和,不需要优化
# 性能测试可以确定需要优化的部分
import time
def func1():
...
def func2():
...
start = time.time()
func1()
end = time.time()
print(end - start)
start = time.time()
func2()
end = time.time()
print(end - start)