函数内部函数-每次?


问题内容

让我们有以下代码:

def big_function():
    def little_function():
         .......
    .........

Python文档说了aboutdef语句:

函数定义是可执行语句。它的执行绑定了函数名…

因此,问题是:def little_function()每次big_function被调用时是否执行?问题def完全是关于陈述,而不是little_function()身体。


问题答案:

您可以使用以下dis模块检查字节码:

>>> import dis
>>> def my_function():
...     def little_function():
...             print "Hello, World!"
...     
... 
>>> dis.dis(my_function)
  2           0 LOAD_CONST               1 (<code object little_function at 0xb74ef9f8, file "<stdin>", line 2>)
              3 MAKE_FUNCTION            0
              6 STORE_FAST               0 (little_function)
              9 LOAD_CONST               0 (None)
             12 RETURN_VALUE

如您所见,内部函数的代码仅被 编译 一次 。每次调用my_function它时都会加载并创建一个新的函数对象(在这种情况下,每次调用def little_function 都会 执行my_function),但这并不会增加太多开销。