我正在尝试使用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是行号...But,就性能而言,这一切意味着什么?如果我试图决定使用哪个函数,我将如何使用dis来比较这两个函数呢?
提前谢谢。
发布于 2013-10-11 17:35:10
你(或者至少是普通的人)不能看不同的汇编代码,也不能分辨哪一个更快。
从IPython中尝试%%timeit魔术函数。
它会自动运行这段代码几次,并给你一个客观的答案。
我最近发现了这篇博客文章,它教我如何用Python来度量这类事情。不仅是时间,还有内存的使用。这篇文章的亮点(至少对我来说)是在它教你实现%lprun魔术函数的时候。
使用它,您将能够逐行查看您的函数,并确切地知道每个函数对所花费的总时间的贡献。
我已经用了几个星期了,很棒。
https://stackoverflow.com/questions/19322705
复制相似问题