copie
2018-05-28 18:53:04 +08:00
In [2]: dis.dis("a!=b>b")
1 0 LOAD_NAME 0 (a)
2 LOAD_NAME 1 (b)
4 DUP_TOP
6 ROT_THREE
8 COMPARE_OP 3 (!=)
10 JUMP_IF_FALSE_OR_POP 18
12 LOAD_NAME 1 (b)
14 COMPARE_OP 4 (>)
16 RETURN_VALUE
>> 18 ROT_TWO
20 POP_TOP
22 RETURN_VALUE
上面是 Python 运行时的字节码;然后我们来解释一下每一行什么意思
LOAD_NAME a 可以理解将 a 压入运行时栈 运行第一行后的栈 a,......|
运行第二行后的栈 b,a,......|
DUP_TOP 可以理解为把栈顶复制一份重新压入栈 运行第三行后的栈 b,b,a,......|
ROT_THREE 可以理解为把原来栈顶放到第三个位
置,把原来二放到第一个位置,把原来第三放到第二位
置 运行第四行后的栈 b,a,b......|
COMPARE_OP 这个就是进行 != 运算,将 b 弹出然后
获取 a 得到比较结果 res 后设置栈顶 运行第五行后的栈 res,b......|
如果 res 是 false 就跳到 18
运行第七行后的栈 b(后一个 b), b,......|