Python нелокальные переменные - PullRequest
1 голос
/ 17 марта 2020

Разве он не должен возвращать 'inner: nonlocal' и 'external: local' ?? Может кто-нибудь объяснить, что происходит, спасибо.

>>>>def outer():
        x = 'local'
        def inner():
            nonlocal x
            x='nonlocal'
            print('inner:',x)
        inner()
        print('outer:',x)

>>>outer()
 inner: nonlocal
 outer: nonlocal

Ответы [ 2 ]

1 голос
/ 17 марта 2020

См. введите описание ссылки здесь ссылка для получения информации о non-local.

Нелокальный оператор заставляет перечисленные идентификаторы ссылаться на ранее связанные переменные в ближайшей охватывающей области, исключая Глобал. Это важно, потому что поведение привязки по умолчанию заключается в том, чтобы сначала выполнить поиск в локальном пространстве имен. Оператор позволяет инкапсулированному коду связывать переменные вне локальной области, кроме глобальной (модульной) области.

Короче говоря, он позволяет назначать значения переменной во внешнем (но не -global) scope.

Если вы удалите ключевое слово nonlocal и попробуете свою программу, вы увидите:

inner: nonlocal
outer: local

Программа:

def outer():
    x = 'local'
    def inner():
        x='nonlocal'
        print('inner:', x)
    inner()
    print('outer:', x)


outer()
1 голос
/ 17 марта 2020

Вы устанавливаете x на 'nonlocal', вызывая inner(). Таким образом, x устанавливается на 'nonlocal' независимо от того, где вы пытаетесь распечатать его из outer(). Поместите оператор печати перед вызовом inner(), и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...