微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么python嵌套函数不称为闭包?

如何解决为什么python嵌套函数不称为闭包?

函数可以从已完成执行的封闭作用域访问局部变量时,就会发生闭包。

def make_printer(msg):
    def printer():
        print(msg)
    return printer

printer = make_printer('Foo!')
printer()

make_printer调用时,一个新的帧被放入堆栈,该printer函数的编译代码作为常量,值为msg局部。然后它创建并返回该函数。因为函数printer引用了变量,所以在函数返回msg后它保持活动状态。make_printer

所以,如果你的嵌套函数没有

  1. 访问封闭范围的本地变量,
  2. 当它们在该范围之外执行时这样做,

那么它们不是闭包。

这是一个不是闭包的嵌套函数的示例。

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 举报,一经查实,本站将立刻删除。