在 dis 字节码中调用的函数比 CALL_FUNCTIONs 多
more function calls than CALL_FUNCTIONs in dis bytecode
考虑程序:
def wrap():
print(66)
print(77,77)
wrap()
dis 模块 (3.5.2) 报告此代码表示:
1 0 LOAD_CONST 0 (<code object wrap at 0x7f9d3b538c90, file "<dis>", line 1>)
3 LOAD_CONST 1 ('wrap')
6 MAKE_FUNCTION 0
9 STORE_NAME 0 (wrap)
4 12 LOAD_NAME 1 (print)
15 LOAD_CONST 2 (77)
18 LOAD_CONST 2 (77)
21 CALL_FUNCTION 2 (2 positional, 0 keyword pair)
24 POP_TOP
5 25 LOAD_NAME 0 (wrap)
28 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
31 POP_TOP
32 LOAD_CONST 3 (None)
35 RETURN_VALUE
这个编译后的字节码包括两个 CALL_FUNCTION 操作,但我在代码中计算了三个函数调用。为什么 print(66) 没有出现?
它在附加到函数 wrap
的代码对象中。试试 dis(wrap)
.
考虑程序:
def wrap():
print(66)
print(77,77)
wrap()
dis 模块 (3.5.2) 报告此代码表示:
1 0 LOAD_CONST 0 (<code object wrap at 0x7f9d3b538c90, file "<dis>", line 1>)
3 LOAD_CONST 1 ('wrap')
6 MAKE_FUNCTION 0
9 STORE_NAME 0 (wrap)
4 12 LOAD_NAME 1 (print)
15 LOAD_CONST 2 (77)
18 LOAD_CONST 2 (77)
21 CALL_FUNCTION 2 (2 positional, 0 keyword pair)
24 POP_TOP
5 25 LOAD_NAME 0 (wrap)
28 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
31 POP_TOP
32 LOAD_CONST 3 (None)
35 RETURN_VALUE
这个编译后的字节码包括两个 CALL_FUNCTION 操作,但我在代码中计算了三个函数调用。为什么 print(66) 没有出现?
它在附加到函数 wrap
的代码对象中。试试 dis(wrap)
.