如何解决为什么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!
在这里,我们将值绑定到参数的默认值。这发生在创建函数时,因此返回 后不需要维护对external
toprinter
值的引用。在这种情况下,它只是函数的普通局部变量。msg``printer``make_printer``msg``printer
解决方法
我在 Python 中看到并使用过嵌套函数,它们与闭包的定义相匹配。那么为什么他们被称为nested functions
而不是closures
?
嵌套函数不是闭包,因为它们不被外部世界使用吗?
更新: 我正在阅读有关闭包的内容,这让我想到了与 Python
相关的这个概念。我在下面的评论中搜索并找到了某人提到的文章,但我无法完全理解该文章中的解释,所以这就是我问这个问题的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。