Python代码运行很慢?研究提速的方法,子程序运行效率比主程序更快,jit装饰器使运算速度大增

Python的运行效率众所周知普遍比其他编程语言慢。Pycharm和Visual Studio Code本身就运作比较卡,为了提升Python的运行效率,我通常只使用Python的原生程序python.exe运行和调试。我作了几个测试,无意中发现子程序的运行效率比主程序更快。举个简单的例子,从1数到1亿,通过计时对比,子程序运行比主程序快了40%以上。

import time

def test1(n:int):
    a:int=1
    print('子程序数数')
    now=time.time()
    while a<n:
    	a+=1
    print(f'耗时:{time.time()-now:.2f}秒。')
    
if __name__ == '__main__':
    print('主程序数数')
    a:int=1
    n:int=100000000
    now=time.time()
    while a<n:
    	a+=1
    print(f'耗时:{time.time()-now:.2f}秒。')
    # 通过子程序运行
    test1(n)

运行结果截图(白色底是IDLE环境,黑色底是Python的命令行模式,如果使用PyCharm、VS Code,运行将会耗更长时间):

这只是简单的数数,在实际项目中,同一段代码放在主程序和放在子程序中,两者运行的时间差可能没有40%那么多,但为了提升Python代码的运行效率,写代码时尽量使用子程序。

Python的运算速度还能不能再提升?

答案是肯定的。 参考知乎上的文章:一行代码让你的python运行速度提高100倍

如果是科学运算,可使用numba库的装饰器@jit加在子程序前面,运算的速度可提升一百倍!

同样一段数数到一亿的代码,对比一下:

import time
from numba import jit
def test1(n:int):
    a:int=1
    print('子程序数数')
    now=time.time()
    while a<n:
    	a+=1
    print(f'耗时:{time.time()-now:.2f}秒。')
    
@jit
def test2(n:int):
    a:int=1
    while a<n:
    	a+=1
    
if __name__ == '__main__':
    print('主程序数数')
    a:int=1
    n:int=100000000
    now=time.time()
    while a<n:
    	a+=1
    print(f'耗时:{time.time()-now:.2f}秒。')
    # 通过子程序运行
    test1(n)

    print('加上装饰器@jit的子程序数数')
    now=time.time()
    test2(n)
    print(f'耗时:{time.time()-now:.2f}秒。')
    

 @jit的装饰器把CPU运算能力发挥得淋漓尽致,令人刮目相看。

需要注意的是,@jit的装饰器严格统一变量类型,上述代码子程序只有整数型int,如果混有浮点数型的变量,运行起来会报错。如果希望JIT能针对所有类型的参数进行运算,可以使用autojit。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值