Что делает nonlocal
оператор Python (в Python 3.0 и более поздних версиях)?
На официальном сайте Python нет документации и она help("nonlocal")
тоже не работает.
Что делает nonlocal
оператор Python (в Python 3.0 и более поздних версиях)?
На официальном сайте Python нет документации и она help("nonlocal")
тоже не работает.
"There is no documentation for nonlocal".
На самом деле, вы можете сделатьhelp(keyword_in_string)
для документации в Python 3 и вышеОтветы:
Сравните это, не используя
nonlocal
:Для этого, используя
nonlocal
, гдеinner()
'sx
теперь такжеouter()
' sx
:источник
Короче говоря, он позволяет присваивать значения переменной во внешней (но не глобальной) области. См. PEP 3104 для всех кровавых деталей.
источник
Поиск в Google «нелокальный python» обнаружил предложение PEP 3104 , в котором полностью описывается синтаксис и обоснование этого утверждения. короче говоря, он работает точно так же, как и
global
оператор, за исключением того, что он используется для ссылки на переменные, которые не являются ни глобальными, ни локальными для функции.Вот краткий пример того, что вы можете сделать с этим. Счетчик генератора может быть переписан, чтобы использовать его так, чтобы он больше походил на идиомы языков с замыканиями.
Очевидно, вы можете написать это как генератор, например:
Но хотя это совершенно идиоматический питон, похоже, что первая версия будет немного более очевидной для начинающих. Правильное использование генераторов, вызывая возвращаемую функцию, является распространенным заблуждением. Первая версия явно возвращает функцию.
источник
nonlocal
оператора в Python; Если вам нужна последовательность натуральных чисел, то идиома Python на самом делеitertools.count()
@ooboo:
Он берет «ближайший» к исходному коду. Это называется «лексическим осмотром» и является стандартным для> 40 лет.
Члены класса Python действительно находятся в словаре,
__dict__
и лексическое определение никогда не будет доступно.Если вы не укажете,
nonlocal
а укажетеx = 7
, будет создана новая локальная переменная "x". Если вы укажетеnonlocal
, он найдет «ближайший» «х» и присвоит ему. Если вы укажете,nonlocal
а «х» нет, то появится сообщение об ошибке.Ключевое слово
global
всегда казалось мне странным, поскольку оно с радостью игнорирует все остальные буквы «х», кроме самого внешнего. Weird.источник
Источник: Python Language Reference
источник
help()
для ключевых слов (и теперь мой ум взорван:help()
без аргументов становится интерактивным ).Цитата из Python 3 Ссылка :
Как сказано в ссылке, в случае нескольких вложенных функций изменяется только переменная в ближайшей вмещающей функции:
«Ближайшая» переменная может находиться на расстоянии нескольких уровней:
Но это не может быть глобальная переменная:
источник
источник
Мое личное понимание «нелокального» утверждения (и, простите меня, поскольку я новичок в Python и программировании в целом) заключается в том, что «нелокальный» - это способ использовать глобальную функциональность внутри итеративных функций, а не тело самого кода , Глобальное утверждение между функциями, если хотите.
источник
с помощью «нелокальных» внутренних функций (т. е. вложенных внутренних функций) можно получить разрешение на чтение и « запись » для этой конкретной переменной внешней родительской функции . И нелокальный можно использовать только внутри внутренних функций, например:
источник