Я получил фрагмент кода, подобный следующему:
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
, кажется, поискво внешней области.