猿问

Python非本地语句

Python非本地语句

Python nonlocal语句做了什么(在Python 3.0及更高版本中)?

官方Python网站上没有文档,help("nonlocal")也没有用。


蝴蝶不菲
浏览 436回答 3
3回答

慕的地8271018

比较这个,不使用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

Qyouu

简而言之,它允许您为外部(但非全局)范围内的变量赋值。有关所有血腥细节,请参阅PEP 3104。

慕妹3242003

谷歌搜索“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不过,虽然这是完全地道的蟒蛇,它似乎是第一个版本将是初学者更明显一点。通过调用返回的函数正确使用生成器是一个常见的混淆点。第一个版本显式返回一个函数。
随时随地看视频慕课网APP

相关分类

Python
我要回答