Синтаксис для вызова случайной функции из списка [дубликат]

На этот вопрос уже есть ответ:

Из этой ветки: m застрял в том, как нелокальный оператор работает внутри определения класса. Насколько я понимаю, определение класса ...

Я пытаюсь выполнить некоторый анализ области видимости в исходном коде 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

Может ли кто-нибудь объяснить разницу между закрытием определения функции и определением класса?

10
задан Martijn Pieters 10 January 2013 в 18:50
поделиться