我有一段这样的代码:
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() # ...
我发现foo
在最外面的范围中定义很难看,我更愿意只在outer
函数中使用它。正如我正确理解的那样,在 Python3 中,这是由nonlocal
. 对于我想要的东西,有没有更好的方法?我更愿意声明和分配foo
,outer
也许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() # ...
(A) 不起作用,foo
似乎在最外层范围内搜索。