Странное поведение функции locals () во вложенных функциях - PullRequest
0 голосов
/ 02 мая 2019

Чтобы выполнять функцию замыкания, важно, чтобы внутренние функции имели доступ к переменным, определенным в окружающих областях.Но почему функция locals () сообщает нам, что эти переменные являются членами локального пространства имен, даже если на них ссылаются после вызова locals ()?

Я ссылался на нелокальную переменную x после вызова locals (), даже после возврата заявления.Я даже предшествовал ему с ключевым словом нелокальный.Но ничего не изменилось.

def f():
    x=0
    def g():
        print(locals())
        return
        nonlocal x
    g()                 # prints "{'x': 0}"
    x=1
    g()                 # prints "{'x': 1}
    return g

g=f()
g()                     # prints "{'x': 1}

Поскольку на x ссылаются после (и не до) вызова locals (), я ожидаю, что будет напечатан пустой словарь {}.Но вместо этого результат сначала {'x': 0} и после изменения во внешней области видимости {'x': 1}.На самом деле, это даже не локальная переменная, поскольку она может быть изменена из окружающей области видимости.Что на самом деле происходит?

1 Ответ

0 голосов
/ 02 мая 2019

Локальная таблица символов хранит всю информацию, относящуюся к локальной области действия программы, и доступна в Python с помощью метода locals (). однако более подробную информацию можно получить из scope

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