Closures in Python[翻译]

来自论坛:

Q: 我不明白为什么即使一个嵌套函数完美的符合闭包的定义,但仅仅因为它没有被外部引用,就不是闭包。

与许多其他的计算术语一样,不同的人以不同的方式使用“闭包”这个词。

严格来讲,闭包就是一个带有自由变量的函数,所有的这些绑定都是提前知道的。
一些早期的编程语言并没有”closed”函数;自由变量的绑定是开放的,并在运行时被确定。有些语言同时具有“开放”与“封闭”函数,我们就需要一种方式来区分二者,于是人们就就开始把后者称为“闭包”。

但是在python和大部分其他的现代编程语言中,所有的函数都是“封闭的”——没有“开放”的自由变量——所以“闭包”这个术语的用法从“所有自由变量都有已知绑定的函数”转变成“一个可以引用不再活动环境的函数”(就像外部函数的本地命名空间,即便该函数已经返回)。因为这很难实现,而程序员不喜欢隐藏那以实现的东西,人们仍然使用术语去区分第一种封闭函数和第二种封闭函数。在这个论坛的线程中,人们有时会争论当你用一种特定的方式去使用第二种封闭函数,他并不像你以另一种方式使用它时更像封闭函数。
见鬼,一些人甚至认为如果一门语言不支持第三种封闭函数(一种目前Python还不支持的封闭函数),那么这门语言实际上根本就没有闭包。

但是作为一名语言使用者,实际上你完全可以忽略这些——你只需要知道在Python中,所有的函数都是封闭的,自由变量绑定词法嵌套的外部作用域变量名。

By Fredrik Lundh
翻译自博客 与http://effbot.org/zone/closure.htm 2020/2/12 23:50

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值