Я пытаюсь выполнить некоторый анализ области видимости в исходном коде Python 3, и я застрял с тем, как нелокальный оператор оператора работает внутри определения класса.
Насколько я понимаю, определение класса выполняетсяего тело находится в новом пространстве имен (назовите его dict) и связывает имя класса с результатом типа (name, base, dict).Нелокальный x должен работать до тех пор, пока он ссылается на переменную, которая связана где-то во вмещающей нелокальной области.
Исходя из этого, я ожидаю, что следующий код будет скомпилирован и запущен:
class A:
v = 1
class B:
nonlocal v
v = 2
но это не так с
SyntaxError: no binding for nonlocal 'v' found
, в то время как следующий код работает отлично
def A():
v = 1
class B:
nonlocal v
v = 2
Может кто-нибудь объяснить здесь разницу между закрытием определения функции и определения класса?