上一篇中简述了这两个关键字的基本用法:
global用于在局部作用于修改或重定义全局变量
nonlocal用于在内部作用域修改或重定义外部变量(全局变量除外)
这只是很浅的理解方式
注意python的特性,变量有mutable和immutable之分,对于mutable变量的,在内部作用域内做修改时完全可以的,不需要上面两个关键字的修饰,比如下面的程序:
a = 12
li = [1, 2, 3]
def g():
b = 11
li[2] = 4 #li变量在内部作用域内被修改了
def func():
print(a)
print(b)
func()
return
if __name__ == ‘__main__‘:
g()
print(li)
但是这样做,情况却又变了:
a = 12
li = [1, 2, 3]
def g():
b = 11
li = [1, 1, 1] #这时修改的是整个list,相当于变量重定义了,所以li被认为是局部的,并不能影响全局变量
def func():
print(a)
print(b)
func()
return
if __name__ == ‘__main__‘:
g()
print(li)
结合python的内存管理方面的知识,我们可以这样理解:只要不涉及到变量内存的重新分配(比如immutable变量赋值,mutable变量整体赋值),在内部、嵌套作用域内的所有操作都是可以的;一旦要用同一个名字指向另一块内存,就要特别说清楚这种改变是全局的还是局部的
时间: 2024-12-10 23:49:48