Python代码提速十大方法
1. 使用内置函数和库
Python内置函数使用C语言实现,比纯Python代码执行更快
# 慢速实现 result = [] for i in range(10000): result.append(i * 2) # 快速实现 - 使用map result = list(map(lambda x: x * 2, range(10000))) # 更快实现 - 使用列表推导式 result = [x * 2 for x in range(10000)]
2. 减少全局变量使用
局部变量访问比全局变量更快,尽量减少全局变量使用
# 慢速实现 global_var = 10 def calculate(): total = 0 for i in range(1000000): total += global_var # 访问全局变量 return total # 快速实现 - 使用局部变量 def calculate_fast(): local_var = 10 total = 0 for i in range(1000000): total += local_var # 访问局部变量 return total
3. 使用适当的数据结构
选择合适的数据结构可大幅提升性能
# 慢速查找 - 使用列表 my_list = [i for i in range(10000)] if 9999 in my_list: # O(n)时间复杂度 pass # 快速查找 - 使用集合 my_set = set(range(10000)) if 9999 in my_set: # O(1)时间复杂度 pass
4. 利用生成器和迭代器
避免创建大型临时列表,节省内存和时间
# 慢速实现 - 创建完整列表 def get_numbers(n): result = [] for i in range(n): result.append(i * i) return result # 快速实现 - 使用生成器 def get_numbers_fast(n): for i in range(n): yield i * i # 按需生成值
5. 使用JIT编译器
使用PyPy或Numba等JIT编译器加速代码执行
# 使用Numba加速数值计算 from numba import jit import numpy as np @jit(nopython=True) def monte_carlo_pi(nsamples): acc = 0 for i in range(nsamples): x = np.random.random() y = np.random.random() if (x**2 + y**2) < 1.0: acc += 1 return 4.0 * acc / nsamples
6. 向量化操作
使用NumPy/Pandas进行向量化计算
import numpy as np # 慢速实现 - Python循环 def slow_dot_product(a, b): result = 0 for i in range(len(a)): result += a[i] * b[i] return result # 快速实现 - NumPy向量化 def fast_dot_product(a, b): return np.dot(a, b) # 使用C实现的快速向量运算
7. 使用多进程/多线程
利用多核CPU并行处理任务
from concurrent.futures import ProcessPoolExecutor def process_data(data): # 数据处理逻辑 return result def parallel_processing(data_list): with ProcessPoolExecutor() as executor: results = list(executor.map(process_data, data_list)) return results
8. 使用C扩展
将性能关键部分用C/C++实现
# 使用Cython加速Python代码 # 文件: fast_module.pyx cimport cython @cython.boundscheck(False) @cython.wraparound(False) def compute(int n): cdef int i, result = 0 for i in range(n): result += i * i return result
9. 缓存计算结果
避免重复计算相同结果
from functools import lru_cache @lru_cache(maxsize=128) def fibonacci(n): if n < 2: return n return fibonacci(n-1) + fibonacci(n-2)
10. 算法优化
选择合适算法大幅降低时间复杂度
# 慢速实现 - O(n²) def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # 快速实现 - O(n log n) def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right)
性能优化最佳实践
- 优先使用内置函数和库
- 避免不必要的对象创建
- 使用局部变量而非全局变量
- 选择时间复杂度更低的算法
- 使用性能分析工具(cProfile)定位瓶颈
- 针对IO密集型任务使用异步编程
- 考虑使用PyPy替代CPython
总结
Python代码优化需要结合多种策略:
- 选择高效算法和数据结构
- 利用Python内置高效函数
- 针对计算密集型任务使用JIT或C扩展
- 合理使用并发和并行编程
- 避免常见性能陷阱
实际应用中应使用性能分析工具确定瓶颈,再针对性地优化热点代码。
发表评论