Инструкция nonlocal в Python
Бывают случаи, когда во внешней функции есть переменная,
к которой нужно получить доступ
во внутренней функции.
Объявим в функции outer
переменную i
. По отношению к
внутренней функции данная переменная
будет являться внешней (глобальными являются
переменные, объявленные ТОЛЬКО во внешнем коде).
А функции inner
зададим прибавление к
i
единицу:
def outer():
i = 0
def inner():
i += 1 # выведет [4, 9, 25]
inner()
return i
Однако для inner
переменная
i
является локальной, Python
считает ее необъявленной и
выводит соответствующую
ошибку. Раньше подобная ошибка
исправлялась с помощью инструкции
global
. Однако здесь i
является внешней переменной, поэтому
следует использовать инструкцию
nonlocal
. Она берет перечисленные
имена переменных в ближайшую область видимости,
исключая глобальную, т.е. i
внутри inner
будет взята с переменной, объявленной
выше данной функции:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # выведет 1
В следующем коде некоторый программист допустил ошибку:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
Что не так с этим кодом? Найдите и исправьте ошибку автора кода.
В следующем коде некоторый программист допустил ошибку:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
Что не так с этим кодом? Найдите и исправьте ошибку автора кода.