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

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



Чат с GPT Компилятор