让 Python 代码运行更快的技巧
admin
2023-07-31 00:47:51
0

注:个人学习记录用。建议大家看原文,原文对比更加清晰,一目了然。

注:各位要使用这些技巧的话,请在自己的服务器上测试一遍,并且加大测试的数值,目前的用例都是 10 W 次,我们可以测试 100 W , 1000 W 次。。。。
注:如果测试的性能相差不多,请以可读性为主。

平台

运行测试的平台环境:

12345678910111213 >>> import sys>>> import platform>>> platform.system()\’Linux\’>>> platform.release()\’3.11.0-19-generic\’>>> sys.version\’2.7.5+ (default, Feb 27 2014, 19:37:08) [GCC 4.8.1]\’>>> from timeit import timeit>>> from dis import dis>>>  

以下的代码主要是使用了 timeit 函数测试处理时间,以及使用 dis 函数显示详细的处理步骤(汇编的方式),能让你清楚的知道,慢在哪里?为什么慢?

测试用例 1

更快的方式:

1234567891011121314151617 def a():    d = {}    return d >>> >>> timeit(a, number=1000000)... 0.0905051231384>>> >>> dis(a)  5           0 BUILD_MAP                0              3 STORE_FAST               0 (d)   6           6 LOAD_FAST                0 (d)              9 RETURN_VALUE         >>>  

更慢的方式:

12345678910111213141516171819 def a():    d = dict()    return d >>> >>> timeit(a, number=1000000)... 0.206549167633>>> >>> dis(a)  5           0 LOAD_GLOBAL              0 (dict)              3 CALL_FUNCTION            0              6 STORE_FAST               0 (d)   6           9 LOAD_FAST                0 (d)             12 RETURN_VALUE         >>>   

测试用例 2

更快的方式:

123456789101112131415161718192021222324252627282930313233 def a():    l = [0, 8, 6, 4, 2, 1, 3, 5, 7, 9]    l.sort()    return l >>> >>> timeit(a, number=1000000)... 0.53688287735>>> >>> dis(a)  5           0 LOAD_CONST               1 (0)              3 LOAD_CONST               2 (8)              6 LOAD_CONST               3 (6)              9 LOAD_CONST               4 (4)             12 LOAD_CONST               5 (2)             15 LOAD_CONST               6 (1)             18 LOAD_CONST               7 (3)             21 LOAD_CONST               8 (5)             24 LOAD_CONST               9 (7)             27 LOAD_CONST              10 (9)             30 BUILD_LIST              10             33 STORE_FAST               0 (l)   6          36 LOAD_FAST                0 (l)             39 LOAD_ATTR                0 (sort)             42 CALL_FUNCTION            0             45 POP_TOP                7          46 LOAD_FAST                0 (l)             49 RETURN_VALUE         >>>  

更慢的方式:

123456789101112131415161718192021222324252627282930 def a():    l = [0, 8, 6, 4, 2, 1, 3, 5, 7, 9]    return sorted(l) >>> >>> timeit(a, number=1000000)... 0.781757831573>>> >>> dis(a)  5           0 LOAD_CONST               1 (0)              3 LOAD_CONST               2 (8)              6 LOAD_CONST               3 (6)              9 LOAD_CONST               4 (4)             12 LOAD_CONST               5 (2)             15 LOAD_CONST               6 (1)             18 LOAD_CONST               7 (3)             21 LOAD_CONST               8 (5)             24 LOAD_CONST               9 (7)             27 LOAD_CONST              10 (9)             30 BUILD_LIST              10             33 STORE_FAST               0 (l)   6          36 LOAD_GLOBAL              0 (sorted)             39 LOAD_FAST                0 (l)             42 CALL_FUNCTION            1             45 RETURN_VALUE         >>>   

测试用例 3

更快的方式:

1234567891011121314151617181920212223242526272829303132333435363738 def a():    

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...