【发布时间】:2016-10-20 10:13:16
【问题描述】:
我已经反汇编了下面的python代码
def factorial(n):
if n <= 1:
return 1
elif n == 2:
return 2
elif n ==4:
print('hi')
return n * 2
以及生成的字节码
2 0 LOAD_FAST 0 (n)
3 LOAD_CONST 1 (1)
6 COMPARE_OP 1 (<=)
9 POP_JUMP_IF_FALSE 16
3 12 LOAD_CONST 1 (1)
15 RETURN_VALUE
4 >> 16 LOAD_FAST 0 (n)
19 LOAD_CONST 2 (2)
22 COMPARE_OP 2 (==)
25 POP_JUMP_IF_FALSE 32
5 28 LOAD_CONST 2 (2)
31 RETURN_VALUE
6 >> 32 LOAD_FAST 0 (n)
35 LOAD_CONST 3 (4)
38 COMPARE_OP 2 (==)
41 POP_JUMP_IF_FALSE 52
7 44 LOAD_CONST 4 ('hi')
47 PRINT_ITEM
48 PRINT_NEWLINE
49 JUMP_FORWARD 0 (to 52)
8 >> 52 LOAD_FAST 0 (n)
55 LOAD_CONST 2 (2)
58 BINARY_MULTIPLY
59 RETURN_VALUE
上述字节码中的“>>”符号代表什么?
【问题讨论】:
-
看起来像
POP_JUMP_IF_FALSE的目标。见这篇文章:Understanding Python Bytecode -
@self:不,右移是
BINARY_RSHIFT或INPLACE_RSHIFT。
标签: python virtual-machine bytecode