'的含义&燃气轮机&燃气轮机';在Python字节码中

'的含义&燃气轮机&燃气轮机';在Python字节码中,python,virtual-machine,bytecode,Python,Virtual Machine,Bytecode,我已经反汇编了以下python代码 def factorial(n): if n <= 1: return 1 elif n == 2: return 2 elif n ==4: print('hi') return n * 2 def阶乘(n): 如果n 16加载速度为0(n) 19荷载常数2(2) 22比较运算2(=) 25如果为假,则弹出跳转32 5 28荷载常数2(2) 31返回值 6>>32加载速度

我已经反汇编了以下python代码

def factorial(n):
    if n <= 1:
        return 1
    elif n == 2:
        return 2
    elif n ==4:
        print('hi')
    return n * 2
def阶乘(n):
如果n 16加载速度为0(n)
19荷载常数2(2)
22比较运算2(=)
25如果为假,则弹出跳转32
5 28荷载常数2(2)
31返回值
6>>32加载速度0(n)
35荷载常数3(4)
38比较运算2(=)
41如果为假,则弹出跳转52
7 44负载常数4(“高”)
47打印项目
48打印新行
49向前跳0(到52)
8>>52加载速度0(n)
55荷载常数2(2)
58二进制乘法
59返回值

上面字节码中的“>>”符号代表什么?

它们是跳转目标;满足条件时,字节码跳转到前面的位置

第一跳:

         9 POP_JUMP_IF_FALSE       16
跳转到偏移量16,因此在偏移量16处,输出有一个目标
>

4     >> 16 LOAD_FAST                0 (n)
从每列的名称中:

[……]

  • 带标签的指令,用
    >
    表示
  • 检测代码对象代码中作为跳转目标的所有偏移,并返回这些偏移的列表


    如果为FALSE,则看起来像是弹出跳转的目标。请参阅本文:@self:No,右移是
    BINARY\u RSHIFT
    INPLACE\u RSHIFT
    4     >> 16 LOAD_FAST                0 (n)