Python中global和nonlocal的区别
global关键字
global
关键字用于在函数内部声明全局变量。如果在函数内部直接赋值一个变量,它会默认被认为是局部变量。
如果要修改一个在函数外定义的全局变量,则需要使用global
关键字来声明这个变量。
x = 5
def func():
global x # 声明 x 是全局变量
x = 10 # 修改全局变量 x
func()
print(x) # 输出 10,全局变量 x 已经被修改s
nonlocal关键字
nonlocal
关键字用于在嵌套的函数中声明非局部变量(即既不是局部变量也不是全局变量)。
如果你需要在一个嵌套的(内部)函数中修改位于外部函数中的变量,就需要使用nonlocal
关键字。
def outer():
x = 5
def inner():
nonlocal x # 声明 x 是外部函数中的变量
x = 10 # 修改外部函数的变量 x
inner()
print(x) # 输出 10,外部函数的变量 x 已经被修改
outer()
区别
global
使得函数内部的作用域可以修改全局作用域中的变量。nonlocal
用于在嵌套函数中访问外层(非全局)函数的变量,也就是说,它允许修改封闭作用域中的变量。
不可以使用 nonlocal
关键字引用全局作用域的变量(即在最外层定义的变量),因为全局作用域不是封闭作用域(enclosing scope)。
同样,如果变量在当前封闭作用域中没有被定义,也不可以使用 nonlocal
。