我正在尝试使用 python 的 dis
用于试验和理解性能的库。下面是我尝试过的实验,以及结果。
import dis
def myfunc1(dictionary):
t = tuple(dictionary.items())
return t
def myfunc2(dictionary, func=tuple):
t = func(dictionary.items())
return t
>>>dis.dis(myfunc1)
4 0 LOAD_GLOBAL 0 (tuple)
3 LOAD_FAST 0 (dictionary)
6 LOAD_ATTR 1 (items)
9 CALL_FUNCTION 0
12 CALL_FUNCTION 1
15 STORE_FAST 1 (t)
5 18 LOAD_FAST 1 (t)
21 RETURN_VALUE
>>>dis.dis(myfunc2)
4 0 LOAD_FAST 1 (func)
3 LOAD_FAST 0 (dictionary)
6 LOAD_ATTR 0 (items)
9 CALL_FUNCTION 0
12 CALL_FUNCTION 1
15 STORE_FAST 2 (t)
5 18 LOAD_FAST 2 (t)
21 RETURN_VALUE
现在,我明白了......
- 最左边的
4
&5
是行号 - 中间一列是机器调用的操作码
- 右边一列是对象(带opargs ?)
...但这一切在性能方面意味着什么?如果我试图决定使用哪个函数,我将如何使用 dis
来比较两者?
提前致谢。
最佳答案
您(或者至少是普通人)无法查看不同的汇编代码,并判断哪个更快。
尝试 IPython 中的 %%timeit 魔法函数。
它会自动多次运行这段代码,并给你一个客观的答案。
我最近找到了this blog post教授如何在 Python 中测量这些类型的东西。不仅是时间,还有内存使用。该帖子的亮点(至少对我而言)是它教您实现 %lprun 魔法函数。
使用它,您将能够逐行查看您的函数,并准确了解每个函数占总花费时间的比例。
我已经使用了几个星期了,非常好。
关于python - 如何使用 `dis.dis` 来分析性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322705/