我需要__闭包__
我刚刚看了一个非常有趣的思维导图:
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中,有一些函数的属性之前叫做 func_X
,现在改成了 __X__
这种形式。这样做的好处是,原来的名字可以留给用户自己定义的属性使用。比如,之前的 func_closure
、func_code
、func_defaults
、func_dict
、func_doc
、func_globals
和 func_name
这些属性,现在都改成了 __closure__
、__code__
、__defaults__
、__dict__
、__doc__
、__globals__
和 __name__
。
简单来说,这些都是以前Python 2里的东西,只是换了个更时髦的名字,叫Python 3000。
想了解更多这些内容,可以去看看 PEP 232