АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗pyPmFnNl 21 of 129 menu
Бесплатная Тренировка Верстки. Приглашаются желающие поверстать!

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

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

enru