Python 内部函数集与非局部函数集

Python inner function sets vs nonlocal

我相信我知道这个问题的答案,但我想仔细检查一下,因为我觉得这有点令人困惑。

def outerFunc():
    mySet = set()
    a = 0
    def innerFunc():
        mySet.add(1)
        mySet.add(2)
        a = 7
    innerFunc()
    print(mySet) # {1, 2}
    print(a) # 0

这里,如果我想改变a的值,我需要使用nonlocal。集合变化的事实仅仅是因为集合是通过引用传递的?因此,在内部函数中我们可以访问外部函数变量的值,但不能修改它们,除非它们是引用?

您可以查看 python document

In Python, variables that are only referenced inside a function are implicitly global. If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global.

所以如果你赋值了一个变量而没有global的变量只会影响局部。 例如,如果您将值分配给 mySet,那么它也不会改变。

def outerFunc():
    mySet = set()   
    def innerFunc():
        mySet = {1}
        mySet.add(2)
    innerFunc()
    print(mySet)  # ''