Python 作用域:局部作用域、全局作用域和使用 global 关键字


在 Python 中,作用域(Scope)是指程序中变量的可见范围和生命周期。理解作用域有助于编写更加健壮和可维护的代码。Python 中主要有以下几种作用域:

  1. 局部作用域(Local Scope)
  2. 全局作用域(Global Scope)
  3. 内嵌作用域(Enclosing Scope)
  4. 内建作用域(Built-in Scope)

此外,global 关键字可以用来在局部作用域中声明全局变量。以下是详细说明和示例。

1. 局部作用域(Local Scope)

局部作用域指函数内部定义的变量。这些变量只能在函数内部访问。

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

my_function()  # 输出: 10
print(x)       # 报错: NameError: name 'x' is not defined

2. 全局作用域(Global Scope)

全局作用域指在函数外部定义的变量,这些变量可以在整个模块中访问。

x = 20  # 全局变量 x

def my_function():
    print(x)  # 访问全局变量 x

my_function()  # 输出: 20
print(x)       # 输出: 20

3. 内嵌作用域(Enclosing Scope)

内嵌作用域指嵌套函数中,外部函数的局部变量。这些变量在嵌套函数中可见。

def outer_function():
    x = 30  # 外部函数的局部变量

    def inner_function():
        print(x)  # 访问外部函数的局部变量
    inner_function()

outer_function()  # 输出: 30

4. 内建作用域(Built-in Scope)

内建作用域是 Python 解释器内置的命名空间,包含了所有内置函数和异常。

print(len("hello"))  # len 是内建函数

5. 使用 global 关键字

在局部作用域中,使用 global 关键字可以声明一个全局变量。这使得在函数内部可以对全局变量进行修改。

x = 40  # 全局变量 x

def my_function():
    global x  # 声明 x 为全局变量
    x = 50    # 修改全局变量 x
    print(x)  # 输出: 50

my_function()
print(x)  # 输出: 50

示例:不同作用域的综合应用

x = 1  # 全局变量 x

def outer_function():
    x = 2  # 外部函数的局部变量 x

    def inner_function():
        nonlocal x  # 声明 x 为外部函数的局部变量
        x = 3  # 修改外部函数的局部变量 x
        print("inner_function x:", x)  # 输出: 3

    inner_function()
    print("outer_function x:", x)  # 输出: 3

outer_function()
print("global x:", x)  # 输出: 1

在这个示例中:

  • x = 1 是全局变量。
  • outer_function 中的 x = 2 是外部函数的局部变量。
  • inner_function 中使用 nonlocal x 修改外部函数的局部变量。

小结

  • 局部作用域:函数内部定义的变量,只能在函数内部访问。
  • 全局作用域:函数外部定义的变量,可以在整个模块中访问。
  • 内嵌作用域:嵌套函数中,外部函数的局部变量在内层函数中可见。
  • 内建作用域:Python 解释器内置的命名空间。
  • global 关键字用于在局部作用域中声明全局变量,允许对全局变量进行修改。

理解作用域有助于避免变量命名冲突,提高代码的可读性和可维护性。


原文链接:codingdict.net