我正在尝试使用 pythondis http://docs.python.org/2/library/dis.html用于试验和了解性能的库。以下是我尝试过的实验及其结果。
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
现在,我明白了...
- the
4
& 5
最左边是行号
- 中间的一列是机器调用的操作码
- 右边的列是对象(opargs https://stackoverflow.com/a/12673195?)
...但这对于性能而言意味着什么?如果我试图决定使用哪个函数,我会如何使用dis
比较两者?
提前致谢。
您(或至少是普通人)无法查看不同的汇编代码并判断哪一个更快。
尝试 IPython 中的 %%timeit 魔术函数。
它会自动运行这段代码几次,并给你一个客观的答案。
我最近发现这篇博文 http://pynash.org/2013/03/06/timing-and-profiling/教如何在 Python 中测量此类事物。不仅是时间,还有内存使用情况。这篇文章的亮点(至少对我来说)是它教你实现 %lprun 魔术函数。
使用它,您将能够逐行查看您的函数,并准确了解每一行对总花费时间的贡献。
我已经使用了几周了,效果非常好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)