def test():
x = 10
def inner():
nonlocal x
x = 20
inner()
return x
print(test())
20
.
Ключевое слово nonlocal
позволяет функции inner
изменить значение переменной x
, объявленной в окружающей (но не глобальной) области видимости (в данном случае, в функции test
). Таким образом, когда inner
присваивает x
значение 20
, это изменение отражается и на переменной x
в функции test
.
Вопрос: Какой результат выведет данный код?
def test():
x = 10
def inner():
nonlocal x
x = 20
inner()
return x
print(test())
Ответ: 20
Разъяснение:
test()
инициализирует локальную переменную x
со значением 10.test()
определяется вложенная функция inner()
.nonlocal
в inner()
указывает, что переменная x
, которую мы собираемся модифицировать, находится в ближайшей внешней (неглобальной) области видимости, то есть в области видимости функции test()
.inner()
вызывается, она изменяет значение x
в test()
на 20.test()
возвращает измененное значение x
, которое теперь равно 20.print()
выводит возвращенное значение, то есть 20.Таким образом, использование nonlocal
позволяет вложенной функции изменять переменную, определенную в окружающей её функции.