python - 函数内部的函数 - 每次?

标签 python performance closures nested-function

让我们有这个代码:

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

Python 文档中提到了 def 语句:

A function definition is an executable statement. Its execution binds the function name...

所以,问题是: 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 被调用),但这不会增加太多开销。

关于python - 函数内部的函数 - 每次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16031092/

相关文章:

mysql - 用于查询大数据集的最佳搜索查询和结构

android - 是否需要将 Google Play Service 升级到最新版本

javascript - 如何拥有默认参数并根据此函数的需要覆盖这些参数?

jquery - 与 jQuery grunt 脚本相比,Jammit 对 jQuery 1.9.1 的压缩效果很差(145k vs 93k)

python - 识别 concurrent.futures.ThreadPoolExecutor 中的当前线程

Python - 替换套接字库中由另一个库调用的函数,该函数由另一个库调用

python - Twisted Deferred.addCallBack() 与 yield 和 @inlineDeferred

python - pexpect pxssh 不会创建我的要求目录

java - 在 Java 应用程序中存储大量类似字典的数据

Swift:使用弱 self 在基于 block 的执行中保持原子性