在 Python 中,变量的默认作用域取决于其定义的位置:
1. 局部变量
- 如果一个变量是在函数内部定义的,那么它默认是一个局部变量。
- 局部变量只在函数内部有效,在函数外部不可访问。
def my_function():
x = 10 # x 是局部变量
print(x)
my_function()
print(x) # 会报错:NameError: name 'x' is not defined
2. 全局变量
- 如果一个变量是在函数外部定义的,那么它默认是一个全局变量。
- 全局变量可以在整个模块内被访问,包括函数内部(但不能直接修改,除非声明为
global
)。
y = 20 # y 是全局变量
def my_function():
print(y) # 可以访问全局变量 y
my_function()
print(y) # 仍然可以访问全局变量
3. 修改全局变量
- 如果你在函数内部想修改全局变量,需要使用
global
关键字。
z = 30 # z 是全局变量
def my_function():
global z # 声明 z 为全局变量
z = 40 # 修改全局变量 z 的值
print(z)
my_function()
print(z) # 输出 40
4. 嵌套作用域与 nonlocal
- 如果变量位于嵌套函数中,可以使用
nonlocal
修改最近一层的外部变量,而不影响全局作用域。
def outer_function():
x = 10 # 外层函数的局部变量
def inner_function():
nonlocal x # 修改外层函数的变量
x = 20
print(f"Inner: {x}")
inner_function()
print(f"Outer: {x}")
outer_function()
总结
- 函数外定义的变量:默认全局变量。
- 函数内定义的变量:默认局部变量。
- 通过
global
和nonlocal
可分别修改全局变量或嵌套作用域变量。