我已经在Python中看到并使用了嵌套函数,它们与闭包的定义匹配。那么为什么叫他们nested functions而不是closures?
nested functions
closures
嵌套函数不是因为外部世界不使用闭包吗?
更新:我正在阅读有关闭包的知识,这让我开始思考关于Python的这个概念。我搜索并找到某人在下面的评论中提到的文章,但是我无法完全理解该文章中的解释,所以这就是为什么我问这个问题。
当函数可以从完成其执行的封闭范围访问局部变量时,就会发生关闭。
def make_printer(msg): def printer(): print msg return printer printer = make_printer('Foo!') printer()
当make_printer被调用时,一个新的帧放在堆栈上的编译代码的printer功能作为一个恒定的值和msg作为本地。然后,它创建并返回函数。由于函数printer引用了msg变量,因此在make_printer函数返回后,该变量将保持活动状态。
make_printer
printer
msg
因此,如果你的嵌套函数没有
那么它们不是闭包。
这是一个不是闭包的嵌套函数的示例。
def make_printer(msg): def printer(msg=msg): print msg return printer printer = make_printer("Foo!") printer() #Output: Foo!
在这里,我们将值绑定到参数的默认值。printer创建函数时会发生这种情况,因此返回 后无需保留对msgexternal 值的引用。在这种情况下只是函数的普通局部变量。printermake_printermsgprinter
。printermake_printermsgprinter