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) # ''
我相信我知道这个问题的答案,但我想仔细检查一下,因为我觉得这有点令人困惑。
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) # ''