在 Python 编程中,作用域(Scope) 是指一个变量可以被访问和引用的范围。作用域与变量的生命周期密切相关,决定了变量何时被创建、何时被销毁以及在哪些地方可以使用它。理解作用域对于编写清晰、可维护的代码至关重要。
Python 中的作用域机制可以通过 LEGB 规则(Local, Enclosing, Global, Built-in)来理解。当我们在代码中引用一个变量时,Python 会按照这个规则逐层查找变量所在的作用域,直到找到变量或抛出错误。
1. 局部作用域(Local Scope)
局部作用域指的是在函数内部定义的变量,这些变量只能在该函数内被访问和操作。局部作用域是临时的,函数执行完毕后,局部作用域内的变量会被销毁。
举个例子:
def calculate_square():
side_length = 5 # 局部变量
print(side_length ** 2) # 可以访问局部变量,输出 25
calculate_square()
# print(side_length) # 这会引发 NameError,因为 side_length 是局部变量
在上述代码中,side_length
是一个局部变量,它只能在 calculate_square
函数内部访问。函数外部尝试访问时,Python 会抛出 NameError
,因为局部变量超出了其作用域。
2. 嵌套作用域(Enclosing Scope)
嵌套作用域是指一个函数内定义了另一个函数。内部函数可以访问外部函数的变量,而外部函数无法访问内部函数的变量。这种作用域一般出现在闭包中。
例子:
def outer_function():