提问人:smed 提问时间:5/28/2021 更新时间:5/28/2021 访问量:89
Python 字节码 + 按值或按名称LOAD_NAME?
Python Bytecode + LOAD_NAME by value or by name?
问:
我是高中的法语 CS 老师。我们正在研究字节码在 Python 虚拟机上的执行。我们最终得到了一个幼稚的问题:在执行(字节码地址 8 处的命令)后,堆栈顶部的符号是什么?还是 ?(此处为 238)。LOAD_NAME 0
x
x
接下来是反汇编的字节码
CONSTS (238, 1512, None)
NAMES ('x', 'y', 'm')
VARNAMES ()
1 0 LOAD_CONST 0 (238)
2 STORE_NAME 0 (x)
4 LOAD_CONST 1 (1512)
6 STORE_NAME 1 (y)
8 LOAD_NAME 0 (x)
10 LOAD_NAME 1 (y)
12 COMPARE_OP 4 (>)
14 POP_JUMP_IF_FALSE 20
16 LOAD_NAME 0 (x)
18 JUMP_FORWARD 2 (to 22)
>> 20 LOAD_NAME 1 (y)
>> 22 STORE_NAME 2 (m)
24 LOAD_CONST 2 (None)
26 RETURN_VALUE
获得
import dis
prog = compile('x=238;y=1512;m=x if (x>y) else y;', '<string>', 'exec')
print(f"CONSTS {prog.co_consts}")
print(f"NAMES {prog.co_names}")
print(f"VARNAMES {prog.co_varnames}")
dis.dis(prog)
我想模块允许跟踪 TOS,但我还没有花时间爬过它的文档,所以如果有人可以分享知识我们很感兴趣。提前谢谢inspect
答: 暂无答案
评论
inspect
byteplay