赞
踩
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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。