在Python中,变量的作用域决定了变量在程序中的可见性和访问范围。Python3中有三种不同的变量作用域:
1. 全局作用域(Global Scope):全局作用域中定义的变量可以在程序的任何地方访问。全局作用域在整个程序中都是可见的。
在函数外部定义的变量就是全局变量,可以在函数内部和外部访问。
示例代码:
x = 10 # 全局变量
def foo():
print(x) # 可以访问全局变量 x
foo() # 输出 10
2. 局部作用域(Local Scope):局部作用域中定义的变量只能在其被定义的函数内部访问。局部作用域在函数被调用时创建,并在函数返回时销毁。
示例代码:
def foo():
y = 20 # 局部变量
print(y) # 可以访问局部变量 y
foo() # 输出 20
print(y) # 报错,无法访问局部变量 y
3. 嵌套作用域(Enclosing Scope):嵌套作用域是指在一个函数内部定义的函数中创建的作用域。嵌套作用域中的变量可以在内外两个函数之间共享。
示例代码:
def outer():
z = 30 # 嵌套作用域变量
def inner():
nonlocal z # 使用 nonlocal 关键字声明 z 为嵌套作用域变量
print(z) # 可以访问嵌套作用域变量 z
z = 40 # 修改嵌套作用域变量的值
inner()
print(z) # 输出 40,内部函数修改了嵌套作用域变量的值
outer()
总结起来,Python3的变量作用域规则如下:
- 优先级:局部作用域 > 嵌套作用域 > 全局作用域
- 在函数内部,局部变量无法直接访问全局变量。如果要在函数内部访问全局变量,可以使用 global
关键字(例如 global x
)声明该变量为全局变量。
- 在嵌套函数内部,可以使用 nonlocal
关键字(例如 nonlocal z
)声明一个变量为嵌套作用域变量,以便在嵌套函数中访问和修改外部函数的局部变量。