wal*_*mat 3 python python-nonlocal
我得到了一段这样的代码:
foo = None
def outer():
global foo
foo = 0
def make_id():
global foo
foo += 1
return foo
id1 = make_id() # id = 1
id2 = make_id() # id = 2
id3 = make_id() # ...
Run Code Online (Sandbox Code Playgroud)
我发现foo在最外面的scop中定义它很难看,我宁愿只在outer函数中使用它.据我所知,在Python3中,这是通过nonlocal.对于我想拥有的东西,有更好的方法吗?我更愿意申报和分配foo,outer并可能在delcare global中inner:
def outer():
foo = 0
def make_id():
global foo
foo += 1 # (A)
return foo
id1 = make_id() # id = 1
id2 = make_id() # id = 2
id3 = make_id() # ...
Run Code Online (Sandbox Code Playgroud)
(A)不起作用,foo似乎在最外层范围内进行搜索.
我为此目的使用1元素列表:
def outer():
foo = [0]
def make_id():
r = foo[0]
foo[0] += 1
return r
return make_id
make_id = outer()
id1 = make_id()
id2 = make_id()
...
Run Code Online (Sandbox Code Playgroud)
这与使用相同nonlocal,代价是稍微麻烦的语法(foo[0]而不是foo).