📜  作用域如何在 python 中工作(1)

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

作用域如何在 Python 中工作

在 Python 中,作用域是指代码中变量的可见范围。作用域规则决定了代码的哪些部分可以访问变量。

Python 中有两种作用域:全局作用域和局部作用域。

全局作用域

在函数外定义的变量拥有全局作用域。这意味着它们在整个程序中都是可见和可访问的。

例如:

x = 10

def print_x():
    print(x)

print_x()  # 输出 10

在上面的代码中,x 是在函数外定义的。由于它拥有全局作用域,因此可以在 print_x() 函数中访问它。

局部作用域

在函数内定义的变量拥有局部作用域。这意味着它们只能在函数内部访问。

例如:

def add(x, y):
    z = x + y
    return z

print(add(2, 3))  # 输出 5
print(z)  # 报错,z 是未定义的变量

在上面的代码中,z 只能在 add() 函数内部访问。如果我们在外部尝试访问它,会导致未定义的变量错误。

嵌套作用域

当一个内部函数嵌套在另一个函数中时,它们会形成一个嵌套作用域。在嵌套的作用域中,内部函数可以访问外部函数中定义的变量。

例如:

def outer_function():
    x = 10
    
    def inner_function():
        print(x)
    
    inner_function()

outer_function()  # 输出 10

在上面的代码中,inner_function() 嵌套在 outer_function() 中。由于 inner_function() 是在 outer_function() 内定义的,因此可以访问 x 变量。

关键字 globalnonlocal

在 Python 中,可以使用关键字 globalnonlocal 来修改变量的作用域。

global 关键字用于在函数内部访问全局变量,并将其更改为函数外部。

例如:

x = 10

def change_x():
    global x
    x = 20

change_x()
print(x)  # 输出 20

在上面的代码中,使用 global 关键字在 change_x() 函数内访问全局变量 x,并将其更改为 20。

nonlocal 关键字用于在嵌套函数中访问外部函数的变量,并将其更改为嵌套函数内部。

例如:

def outer_function():
    x = 10
    
    def inner_function():
        nonlocal x
        x = 20
    
    inner_function()
    print(x)

outer_function()  # 输出 20

在上面的代码中,使用 nonlocal 关键字在 inner_function() 中访问 outer_function() 中定义的变量 x,并将其更改为 20。

总结

作用域规则是 Python 中重要的概念之一,理解作用域是编写高质量代码的关键。在 Python 中,有全局作用域和局部作用域,并且可以使用关键字 globalnonlocal 来修改变量的作用域。