我需要__闭包__

7 投票
4 回答
2419 浏览
提问于 2025-04-15 15:17

我刚刚看了一个非常有趣的思维导图:

http://www.mindmeister.com/10510492/python-underscore

我在想一些新的内容是什么意思,比如 __code____closure__。我在网上查了一下,但没有找到具体的解释。有没有人知道呢?

4 个回答

4

它们以前被称为

func_closure (now __closure__), func_code (now __code__)

(这应该有助于你在网上搜索)。

下面是一个简短的解释,来自这里

  • func_closure: 可能是None,也可能是一个元组,里面包含了函数的自由变量的绑定(只读)
  • func_code: 代表编译后函数主体的代码对象(可写)
6

其实在CPython 2.x中,你有类似的字段:

>>> first = lambda x: lambda y: x
>>> f = first(2)
>>> type(f.func_code)
<type 'code'>
>>> map(type, f.func_closure)
[<type 'cell'>]

补充:想了解这些结构的具体含义,可以去看看“用户定义的函数”和“代码对象”,它们在Python参考文档的“数据模型”章节中有详细解释。

7

来自 Python 3.0 的新特性

在Python中,有一些函数的属性之前叫做 func_X,现在改成了 __X__ 这种形式。这样做的好处是,原来的名字可以留给用户自己定义的属性使用。比如,之前的 func_closurefunc_codefunc_defaultsfunc_dictfunc_docfunc_globalsfunc_name 这些属性,现在都改成了 __closure____code____defaults____dict____doc____globals____name__

简单来说,这些都是以前Python 2里的东西,只是换了个更时髦的名字,叫Python 3000。

想了解更多这些内容,可以去看看 PEP 232

撰写回答