为什么python嵌套函数不称为闭包?
我已经在Python中看到并使用了嵌套函数,它们与闭包的定义匹配。那么为什么叫他们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
函数返回后,该变量将保持活动状态。
因此,如果你的嵌套函数没有
- 访问封闭范围本地的变量,
- 当它们在该范围之外执行时,
那么它们不是闭包。
这是一个不是闭包的嵌套函数的示例。
def make_printer(msg): def printer(msg=msg):
print msg
return printer
printer = make_printer("Foo!")
printer() #Output: Foo!
在这里,我们将值绑定到参数的默认值。printer创建函数时会发生这种情况,因此返回 后无需保留对msgexternal 值的引用。在这种情况下只是函数的普通局部变量。printermake_printermsgprinter
以上是 为什么python嵌套函数不称为闭包? 的全部内容, 来源链接: utcz.com/qa/417699.html