您可以简单地让Python告诉您
dis模块产生了什么字节码:
>>> import dis>>> def f(): return 1 < input("Value:") < 10... >>> dis.dis(f) 10 LOAD_ConST 1 (1) 3 LOAD_GLOBAL 0 (input) 6 LOAD_ConST 2 ('Value:') 9 CALL_FUNCTION 1 12 DUP_TOP 13 ROT_THREE 14 COMPARE_OP 0 (<) 17 JUMP_IF_FALSE_OR_POP 27 20 LOAD_ConST 3 (10) 23 COMPARE_OP 0 (<) 26 RETURN_VALUE >> 27 ROT_TWO 28 POP_TOP 29 RETURN_VALUEPython使用堆栈;该
CALL_FUNCTION字节码堆(上用途项目
input的全球和
'Value:'字符串)调用函数用一个参数,更换堆栈函数调用的结果在这两个项目。在函数调用之前,常量
1已加载到堆栈中。
因此,在
input被调用时,堆栈看起来像:
input_result1
并
DUP_TOP复制最高值,然后旋转最高的三个堆栈值以得出:
1input_resultinput_result
和
COMPARE_OP用来测试前两项
<,并用结果替换前两项。
如果结果是字节码跳转到27,
False则
JUMP_IF_FALSE_OR_POP字节码将
False顶部的剩余部分旋转到顶部,
input_result用a清除该字节
POP_TOP,然后返回剩余的
False顶部值作为结果。
True但是,如果结果是该值,则该
JUMP_IF_FALSE_OR_POP字节码会从堆栈中弹出该值,并将其放置
10在顶部,我们得到:
10 input_result
然后进行另一个比较并返回。
综上所述,基本上,Python会这样做:
stack_1 = stack_2 = input('Value:')if 1 < stack_1: result = Falseelse: result = stack_2 < 10与
stack_*值再次清除。
然后,堆栈保存 未命名的中间结果 以进行比较



