Кроме глобальных переменных бывают nonlocal
-переменные.
Они очень похожи на глобальные.
При ссылке переменную, которая не определена в текущей функции, будет использована "ближайшая" из локальных переменных в объемлющих функциях,
либо в глобальной области видимости.
Если же переменную пометить как nonlocal
, то поиск переменной не будет производиться за пределами инструкций def ни в глобальной области видимости объемлющего модуля, ни во встроенной области видимости, даже если переменные с такими именами там существуют.
Переменные, помеченные как nonlocal
, можно менять внутри функции, при этом будет изменяться её значение в соответствующей объемлющей функции. В отличие от global
декларация nonlocal
не позволяет создать переменную во внешней области видимости.
def tester():
state = 1
print (state)
def nested():
state = 2
print (state)
nested()
print (state)
tester()
>>> 1
>>> 2
>>> 1
|
def tester():
state = 1
print (state)
def nested():
nonlocal state
state = 2
print (state)
nested()
print (state)
tester()
>>> 1
>>> 2
>>> 2
|
Последнее изменение: Суббота, 15 Август 2020, 02:35