嵌套循环的变量作用域
在嵌套循环中,内层循环可以访问并修改外层循环中的变量,因为它们共享同一个作用域。内层循环对变量的修改会直接影响到外层循环。
for i in range(1):
x = '123' # 外层循环中的 x
for j in range(1):
x = '113' # 修改外层循环中的 x
print(x) # 输出 113
print(x) # 仍然是 113,因为内层循环修改了 x
在这个例子中,内层循环对 x
的修改会影响到外层循环中的 x
,因为 x
变量在同一个作用域内。
嵌套函数的变量作用域
在嵌套函数中,内层函数拥有自己的局部作用域。内层函数中定义的变量不会影响外层函数中的变量,除非使用 nonlocal
关键字显式声明。
def outer():
x = '123' # 外层函数中的 x
def inner():
x = '113' # 内层函数中的局部变量 x
print(x) # 输出 113
inner()
print(x) # 仍然是 123,因为内层函数的 x 不会影响外层函数的 x
outer()
在这个例子中,内层函数 inner
中的 x
是一个新的局部变量,与外层函数 outer
中的 x
无关。内层函数中对 x
的修改不会影响外层函数中的 x
。
使用 nonlocal
关键字
如果需要在嵌套函数中修改外层函数中的变量,可以使用 nonlocal
关键字。
def outer():
x = '123' # 外层函数中的 x
def inner():
nonlocal x
x = '113' # 修改外层函数中的 x
print(x) # 输出 113
inner()
print(x) # 现在是 113,因为内层函数修改了外层函数中的 x
outer()
在这个例子中,nonlocal
关键字允许 inner
函数修改 outer
函数中的 x
。
总结
- 嵌套循环:内层循环与外层循环共享同一个作用域,内层循环可以修改外层循环中的变量。
- 嵌套函数:内层函数有自己的局部作用域,内层函数中的变量不会影响外层函数中的变量,除非使用
nonlocal
关键字。
这种作用域规则使得嵌套函数更具模块化和封装性,而嵌套循环更适合在同一逻辑块中共享和修改数据。