在Python 3.3.1中,这有效:
i = 76
def A():
global i
i += 10
print(i) # 76
A()
print(i) # 86
这也适用:
def enclosing_function():
i = 76
def A():
nonlocal i
i += 10
print(i) # 76
A()
print(i) # 86
enclosing_function()
但这不起作用:
i = 76
def A():
nonlocal i # "SyntaxError: no binding for nonlocal 'i' found"
i += 10
print(i)
A()
print(i)
nonlocal
关键字状态的文档(添加了重点):
非本地语句使列出的标识符引用最近的封闭范围中的先前绑定的变量。
在第三个示例中,“最近封闭范围”恰好是全局范围。那为什么不起作用呢?
我确实注意到文档继续说明(强调):
[
nonlocal
]语句允许封装的代码在全局(模块)范围之外的本地范围之外重新绑定变量。
但是,严格来说,这并不意味着我在第三个示例中所做的不起作用。
Smart猫小萌
一只甜甜圈
慕无忌1623718
相关分类