Python非本地语句Python nonlocal语句做了什么(在Python 3.0及更高版本中)?官方Python网站上没有文档,help("nonlocal")也没有用。
3 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
比较这个,不使用nonlocal
:
x = 0def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x)outer()print("global:", x)# inner: 2# outer: 1# global: 0
对此,使用nonlocal
,其中inner()
的x
现在也是outer()
的x
:
x = 0def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x)outer()print("global:", x)# inner: 2# outer: 2# global: 0
如果我们要使用
global
它,它将绑定x
到正确的“全局”值:x = 0def outer(): x = 1 def inner(): global x x = 2 print("inner:", x) inner() print("outer:", x)outer()print("global:", x)# inner: 2# outer: 1# global: 2
慕妹3242003
TA贡献1824条经验 获得超6个赞
谷歌搜索“python nonlocal”出现了Proposal,PEP 3104,它完整地描述了该声明背后的语法和推理。简而言之,它的工作方式与global
语句完全相同,只是它用于引用既不是全局也不是函数本地的变量。
以下是您可以使用此功能的简要示例。可以重写计数器生成器以使用它,使其看起来更像是带闭包的语言的习语。
def make_counter(): count = 0 def counter(): nonlocal count count += 1 return count return counter
显然,你可以把它写成一个生成器,如:
def counter_generator(): count = 0 while True: count += 1 yield count
不过,虽然这是完全地道的蟒蛇,它似乎是第一个版本将是初学者更明显一点。通过调用返回的函数正确使用生成器是一个常见的混淆点。第一个版本显式返回一个函数。
添加回答
举报
0/150
提交
取消