我已经了解到,出于优化原因,Python的内部函数实际上并没有指向父框架的指针,但它们将父变量存储在一个名为“cell”(func.func_closure
)的特殊对象中
我认为那些变量被复制到那个单元格,所以如果它是真的我不能使用setter和getters作为内部函数,因为它们每个都有变量的副本。
为了测试这个理论,我写了下面的代码:
def foo(x):
def getter():
x
def setter(y):
x=y
def adder(y):
if isinstance(y, list):
x += y
else:
print "not a list"
return (getter, setter, adder)
但是当我运行它时,我发现了一些更奇怪的东西:似乎只有函数getter
保存了它的父级(foo
)变量,尽管我认为setter
和{ {1}}也应该保存它。
我使用Python 2.7对其进行了测试,并在调用后发现了
adder
有谁知道为什么会这样?