我刚刚在 python 中遇到了 dissembler 函数。但我无法弄清楚这意味着什么。任何人都可以根据阶乘函数的结果(基于递归和循环)解释工作和使用
递归代码和对应的dis代码:
>>> def fact(n):
... if n==1:
... return 1
... return n*fact(n-1)
...
>>> dis.dis(fact)
2 0 LOAD_FAST 0 (n)
3 LOAD_CONST 1 (1)
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_FALSE 16
3 12 LOAD_CONST 1 (1)
15 RETURN_VALUE
4 >> 16 LOAD_FAST 0 (n)
19 LOAD_GLOBAL 0 (fact)
22 LOAD_FAST 0 (n)
25 LOAD_CONST 1 (1)
28 BINARY_SUBTRACT
29 CALL_FUNCTION 1
32 BINARY_MULTIPLY
33 RETURN_VALUE
使用循环的阶乘函数给出以下结果:
def factor(n):
... f=1
... while n>1:
... f*=n
... n-=1
...
>>> dis.dis(factor)
2 0 LOAD_CONST 1 (1)
3 STORE_FAST 1 (f)
3 6 SETUP_LOOP 36 (to 45)
>> 9 LOAD_FAST 0 (n)
12 LOAD_CONST 1 (1)
15 COMPARE_OP 4 (>)
18 POP_JUMP_IF_FALSE 44
4 21 LOAD_FAST 1 (f)
24 LOAD_FAST 0 (n)
27 INPLACE_MULTIPLY
28 STORE_FAST 1 (f)
5 31 LOAD_FAST 0 (n)
34 LOAD_CONST 1 (1)
37 INPLACE_SUBTRACT
38 STORE_FAST 0 (n)
41 JUMP_ABSOLUTE 9
>> 44 POP_BLOCK
>> 45 LOAD_CONST 0 (None)
48 RETURN_VALUE
谁能告诉我如何确定哪个更快?
请您参考如下方法:
要测量运行速度,请使用 timeit Python 自带的模块。
dis 模块用于了解字节码可能的样子;并且它非常特定于 cpython。
它的一个用途是查看为循环或方法中的变量分配什么、何时以及如何存储。但是,这是一个专门的模块,通常不用于效率计算;使用 timeit 计算某事物的速度,然后使用 dis 了解幕后发生的事情 - 得出可能的原因.
