gpt4 book ai didi

Python __closure__ 变量和单元格

转载 作者:太空狗 更新时间:2023-10-30 02:12:57 26 4
gpt4 key购买 nike

在探索一些解决方案的同时to my previous question关于 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__ 属性只包含一个单元格元组,它存储封闭的。但是没有关于包含的变量名称 的信息 -(即单元格存储在 tuple 中,而不是 dict)。那么Python是如何知道被封装的变量名的呢?

最佳答案

python编译代码使用索引;变量与单元格结构中的索引相关联。

>>> def foo():
... x = 5
... def bar():
... return x
... return bar
...
>>> bar = foo()
>>> import dis
>>> dis.dis(bar)
4 0 LOAD_DEREF 0 (x)
3 RETURN_VALUE

LOAD_DEREF 字节码引用第一个单元格值。

关于Python __closure__ 变量和单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12284254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com