在dis字节码中比CALL_FUNCTIONs更多的函数调用

时间:2018-04-23 03:51:06

标签: python python-3.x assembly 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操作,但我在代码中计算了三个函数调用。为什么不打印(66)?

1 个答案:

答案 0 :(得分:1)

它位于附加到函数wrap的代码对象中。试试dis(wrap)