我正在学习编程语言的概念。
在 Python 语法中,我发现了“nonlocal”这个术语。
那么,在 Python 中,“nonlocal”是什么意思呢?
我正在学习编程语言的概念。
在 Python 语法中,我发现了“nonlocal”这个术语。
那么,在 Python 中,“nonlocal”是什么意思呢?
在嵌套块中存在非局部变量。使用关键字nonlocal,并获取最近的封闭块中的值。例如:
非局部变量存在于嵌套块中。使用关键字 nonlocal 并取自最近的封闭块的值。例如:
def outer():
x = "local"
def inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
inner()
print("outer:", x)
由于内部函数改变了 x 的值,所以输出两次均为“nonlocal”。
inner()
中的 nonlocal foo
可以访问 middle()
中的非本地变量 foo = 10
,但无法访问 outer()
中的非本地变量 foo = 5
或者在 outer()
外部的全局变量 foo = 0
,如下所示:
foo = 0 # <- ✖
def outer():
foo = 5 # <- ✖
def middle():
foo = 10 # <- 〇
def inner():
nonlocal foo # Here
foo += 1
print(foo) # 11
inner()
middle()
outer()
inner()
中的 global foo
可以访问 全局变量 foo = 0
,但无法访问 outer()
和 middle()
中的 非局部变量 foo = 5
,如下所示:
foo = 0 # <- 〇
def outer():
foo = 5 # <- ✖
def middle():
foo = 10 # <- ✖
def inner():
global foo # Here
foo += 1
print(foo) # 1
inner()
middle()
outer()
global x
def outer():
x="global"
def inner():
nonlocal x
x="nonlocal"
def inner2():
x="local"
inner2()
print(x)
inner()
print(x)
outer()
Output:
global
nonlocal