Appearance

Python中global和nonlocal的区别

geekbing2023-11-11Pythonpython

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

上次更新 3/31/2024, 6:29:32 AM