Чтобы выполнять функцию замыкания, важно, чтобы внутренние функции имели доступ к переменным, определенным в окружающих областях.Но почему функция 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}.На самом деле, это даже не локальная переменная, поскольку она может быть изменена из окружающей области видимости.Что на самом деле происходит?