您可以简单地让Python告诉您使用^{} module生成的字节码:>>> import dis
>>> def f(): return 1 < input("Value:") < 10
...
>>> dis.dis(f)
1 0 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_VALUE
Python使用堆栈,^{} bytecode使用堆栈上的项(input全局和{}字符串)用一个参数调用函数,用函数调用的结果替换堆栈上的这两个项。在函数调用之前,常量1被加载到堆栈中。在
所以在调用input时,堆栈看起来像:
^{pr2}$
1
input_result
input_result
和一个COMPARE_OP来用
如果结果是False,则^{} bytecode跳到27,它将顶部的False与剩余的input_result一起旋转,用POP_TOP清除掉,然后返回剩余的F