📜  Python全局,局部和非局部变量(1)

📅  最后修改于: 2023-12-03 15:04:37.774000             🧑  作者: Mango

Python全局、局部和非局部变量

在Python中,变量的作用域决定了它们在程序中的可访问范围。Python中有三种不同的变量作用域:全局变量、局部变量和非局部变量。本文将介绍这三种变量作用域,并解释它们的用途和区别。

全局变量(Global Variables)

全局变量在整个程序中都可以访问和使用。它们通常在函数之外声明,可以在程序的任何地方使用。要在函数内部访问全局变量,需要使用global关键字。下面是一个使用全局变量的示例:

x = 10  # 全局变量

def foo():
    global x  # 在函数内部使用全局变量
    print(x)

foo()  # 输出:10

可以看到,我们使用global关键字将全局变量x引入了函数foo()的命名空间中,这样我们就可以在函数内部使用全局变量了。

局部变量(Local Variables)

局部变量只能在声明它们的函数内部访问和使用。它们的作用范围限定在函数内部,并且在函数调用结束后会被销毁。下面是一个使用局部变量的示例:

def foo():
    x = 10  # 局部变量
    print(x)

foo()  # 输出:10

print(x)  # 报错:NameError: name 'x' is not defined

在函数内部声明的变量x是一个局部变量,它只能在函数内部使用。当我们尝试在函数外部访问它时,会引发NameError异常。

非局部变量(Nonlocal Variables)

非局部变量指的是嵌套函数中的变量,它们既不是全局变量也不是局部变量。在一个函数内部定义的函数中,可以使用nonlocal关键字来引用外部函数的非局部变量。下面是一个使用非局部变量的示例:

def outer():
    x = 10  # 非局部变量

    def inner():
        nonlocal x  # 在嵌套函数中使用非局部变量
        x += 5
        print(x)

    inner()  # 输出:15

outer()

在上面的示例中,我们在inner()函数中使用了nonlocal关键字来引用了外部函数outer()中的非局部变量x。这样,在inner()函数中对x的修改会影响到外部函数中的同名变量。

总结
  • 全局变量是在整个程序中都可以访问和使用的变量。
  • 局部变量限定在声明它们的函数内部使用,函数调用结束后会被销毁。
  • 非局部变量是嵌套函数中的变量,通过nonlocal关键字可以在内部函数中引用外部函数的同名变量。

了解变量的作用域可以帮助我们更好地组织和管理代码,避免命名冲突和意外的行为。在编写程序时,要根据变量的使用情况选择适当的作用域。