python中global和nonlocal的区别

122 阅读1分钟

User: 和global有什么区别 Kimi: globalnonlocal 是 Python 中用于处理变量作用域的关键字,它们的区别如下:

globalnonlocal
作用域全局作用域非本地作用域
使用场景用于访问和修改全局变量用于访问和修改外层函数的变量
声明位置在函数内部声明在嵌套函数内部声明

1. global

global 用于声明全局变量,使得函数内部可以访问和修改全局作用域中的变量。

示例:

x = 10  # 全局变量

def my_function():
    global x
    x = 20  # 修改全局变量 x
    print(f"函数内的 x: {x}")  # 输出: 函数内的 x: 20

my_function()
print(f"全局变量 x: {x}")  # 输出: 全局变量 x: 20

2. nonlocal

nonlocal 用于声明非本地变量,使得嵌套函数可以访问和修改外层函数的变量。

示例:

def outer_function():
    x = 10  # 外层函数的变量

    def inner_function():
        nonlocal x  # 声明 x 是外层函数的变量
        x = 20  # 修改外层函数的变量
        print(f"内层函数中的 x: {x}")  # 输出: 内层函数中的 x: 20

    inner_function()
    print(f"外层函数中的 x: {x}")  # 输出: 外层函数中的 x: 20

outer_function()

3. 区别

  • 作用域

    • global 访问全局作用域的变量。
    • nonlocal 访问外层函数的变量,而不是全局作用域。
  • 适用场景

    • global 用于需要全局共享变量的场景。
    • nonlocal 用于需要在嵌套函数中修改外层变量的场景。
  • 变量修改

    • global 可以在函数内部修改全局变量。
    • nonlocal 可以在嵌套函数内部修改外层函数的变量。

通过以上对比,你可以根据具体的需求选择使用 globalnonlocal