# Инструкция 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())`

Что не так с этим кодом? Найдите и исправьте ошибку автора кода.

← →
↑