让Python加速运行的八种实用技巧分享

作者:

文章目录
  • Python的内置函数是用C语言实现的,运行速度比纯Python代码快得多。 # 慢速写法 result = [] for item in iterable: result.append(func(item)) # 快速写法 – 使用map函数 result = list(map(func, iterable)) # 或者使用列表推导式 result = [func(item) for item in iterable]
  • Numba是一个JIT(即时)编译器,可以将Python函数编译为机器码。 from numba import jit import numpy as np @jit(nopython=True) def sum_array(arr): total = 0.0 for i in range(arr.shape[0]): total += arr[i] return total large_array = np.random.rand(10000000) print(sum_array(large_array))
  • Python有GIL(全局解释器锁),多线程不适合CPU密集型任务,多进程是更好的选择。 from multiprocessing import Pool def process_data(data): # 数据处理逻辑 return result * 2 if __name__ == ‘__main__’: data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] with Pool(4) as p: # 使用4个进程 results = p.map(process_data, data) print(results)
  • Cython允许你编写C扩展模块,显著提升性能。 # 保存为example.pyx def compute(int n): cdef int i cdef double res = 0.0 for i in range(n): res += i * i return res 然后创建setup.py: from distutils.core import setup from Cython.Build import cythonize setup(ext_modules=cythonize(‘example.pyx’)) 编译并安装: python setup.py build_ext –inplace
  • 选择合适的数据结构可以大幅提升性能。 # 频繁成员检查使用集合(set)而不是列表 large_list = list(range(1000000)) large_set = set(large_list) # 慢速 if 999999 in large_list: # O(n) pass # 快速 if 999999 in large_set: # O(1) pass
  • 避免Python级别的循环,使用向量化操作。 import numpy as np # 慢速 – Python循环 def slow_dot(a, b): result = 0 for x, y in zip(a, b): result += x * y return result # 快速 – NumPy向量化 def fast_dot(a, b): return np.dot(a, b) a = np.random.rand(1000000) b = np.random.rand(1000000) %timeit slow_dot(a, b) # 约500ms %timeit fast_dot(a, b) # 约2ms
  • 对于计算密集型且频繁使用相同参数的函数,使用缓存可以避免重复计算。 from functools import lru_cache @lru_cache(maxsize=128) def expensive_function(x, y): # 模拟复杂计算 result = 0 for i in range(x): for j in range(y): result += i * j return result # 第一次调用会执行计算 print(expensive_function(100, 100)) # 相同参数再次调用会直接返回缓存结果 print(expensive_function(100, 100))
  • 局部变量访问比全局变量快得多。 # 慢速 – 频繁访问全局变量 global_var = 10 def slow_func(): total = 0 for i in range(1000000): total += global_var return total # 快速 – 使用局部变量 def fast_func(): local_var = global_var total = 0 for i in range(1000000): total += local_var return total %timeit slow_func() # 约80ms %timeit fast_func() # 约50ms
  • 优先使用内置函数和库 对数值计算使用Numba JIT CPU密集型任务使用多进程 关键代码用Cython编译 选择高效的数据结构 使用NumPy/Pandas向量化操作 缓存函数结果避免重复计算 减少全局变量访问 根据你的具体应用场景选择合适的优化方法,通常可以带来几倍到几百倍的性能提升!记住在优化前先分析性能瓶颈,使用cProfile等工具找出真正需要优化的部分。 以上就是让Python加速运行的八种实用技巧的详细内容,更多关于Python加速运行技巧的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: 分享Python 加速运行技巧 python运行加速的几种方式 Python脚本代码加速运行优化技巧 Python加速程序运行的方法
  • 目录
    • 1. 使用内置函数和库
    • 2. 利用JIT编译器 – Numba
    • 3. 使用多进程处理CPU密集型任务
    • 4. 使用Cython将Python编译为C
    • 5. 使用高效的数据结构
    • 6. 利用NumPy和Pandas进行向量化操作
    • 7. 使用lru_cache缓存函数结果
    • 8. 避免不必要的全局变量访问
    • 总结

    Python的内置函数是用C语言实现的,运行速度比纯Python代码快得多。

    # 慢速写法
    result = []
    for item in iterable:
        result.append(func(item))
        
    # 快速写法 - 使用map函数
    result = list(map(func, iterable))
    
    # 或者使用列表推导式
    result = [func(item) for item in iterable]
    

    Numba是一个JIT(即时)编译器,可以将Python函数编译为机器码。

    from numba import jit
    import numpy as np
    
    @jit(nopython=True)
    def sum_array(arr):
        total = 0.0
        for i in range(arr.shape[0]):
            total += arr[i]
        return total
    
    large_array = np.random.rand(10000000)
    print(sum_array(large_array))
    

    Python有GIL(全局解释器锁),多线程不适合CPU密集型任务,多进程是更好的选择。

    from multiprocessing import Pool
    
    def process_data(data):
        # 数据处理逻辑
        return result * 2
    
    if __name__ == '__main__':
        data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        with Pool(4) as p:  # 使用4个进程
            results = p.map(process_data, data)
        print(results)
    

    Cython允许你编写C扩展模块,显著提升性能。

    # 保存为example.pyx
    def compute(int n):
        cdef int i
        cdef double res = 0.0
        for i in range(n):
            res += i * i
        return res
    

    然后创建setup.py:

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(ext_modules=cythonize('example.pyx'))
    

    编译并安装:

    python setup.py build_ext --inplace
    

    选择合适的数据结构可以大幅提升性能。

    # 频繁成员检查使用集合(set)而不是列表
    large_list = list(range(1000000))
    large_set = set(large_list)
    
    # 慢速
    if 999999 in large_list:  # O(n)
        pass
        
    # 快速
    if 999999 in large_set:  # O(1)
        pass
    

    避免Python级别的循环,使用向量化操作。

    import numpy as np
    
    # 慢速 - Python循环
    def slow_dot(a, b):
        result = 0
        for x, y in zip(a, b):
            result += x * y
        return result
    
    # 快速 - NumPy向量化
    def fast_dot(a, b):
        return np.dot(a, b)
    
    a = np.random.rand(1000000)
    b = np.random.rand(1000000)
    
    %timeit slow_dot(a, b)  # 约500ms
    %timeit fast_dot(a, b)  # 约2ms
    

    对于计算密集型且频繁使用相同参数的函数,使用缓存可以避免重复计算。

    from functools import lru_cache
    
    @lru_cache(maxsize=128)
    def expensive_function(x, y):
        # 模拟复杂计算
        result = 0
        for i in range(x):
            for j in range(y):
                result += i * j
        return result
    
    # 第一次调用会执行计算
    print(expensive_function(100, 100))
    # 相同参数再次调用会直接返回缓存结果
    print(expensive_function(100, 100))
    

    局部变量访问比全局变量快得多。

    # 慢速 - 频繁访问全局变量
    global_var = 10
    
    def slow_func():
        total = 0
        for i in range(1000000):
            total += global_var
        return total
    
    # 快速 - 使用局部变量
    def fast_func():
        local_var = global_var
        total = 0
        for i in range(1000000):
            total += local_var
        return total
    
    %timeit slow_func()  # 约80ms
    %timeit fast_func()  # 约50ms
    

    优先使用内置函数和库

    对数值计算使用Numba JIT

    CPU密集型任务使用多进程

    关键代码用Cython编译

    选择高效的数据结构

    使用NumPy/Pandas向量化操作

    缓存函数结果避免重复计算

    减少全局变量访问

    根据你的具体应用场景选择合适的优化方法,通常可以带来几倍到几百倍的性能提升!记住在优化前先分析性能瓶颈,使用cProfile等工具找出真正需要优化的部分。

    以上就是让Python加速运行的八种实用技巧的详细内容,更多关于Python加速运行技巧的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • 分享Python 加速运行技巧
    • python运行加速的几种方式
    • Python脚本代码加速运行优化技巧
    • Python加速程序运行的方法

    站内搜索