在探索我之前关于 Python 作用域内部工作原理的问题的一些解决方案时,我了解了该__closure__
属性。似乎 Python 使用此属性从嵌套函数中访问在外部范围中定义的变量。
我们可以通过执行以下操作来看到这一点:
def foo():
x = 5
def bar():
print(x)
print(*(cell.cell_contents for cell in bar.__closure__))
bar()
foo()
这显示了两个封闭的值5
和函数bar
本身。
我不明白这是如何工作的 - 因为,该__closure__
属性仅包含一个存储封闭值的单元格元组。但是没有关于封闭变量名称的信息- (即单元格存储在 a 中tuple
,而不是 a dict
)。那么 Python 是如何知道被括起来的变量的名称的呢?