父母的内在功能和范围

时间:2016-07-05 09:31:46

标签: python nested-function

我已经了解到,出于优化原因,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

有谁知道为什么会这样?

0 个答案:

没有答案