Пошуковий пошук в Google для "python nonlocal" з'явився у пропозиції PEP 3104 , який повністю описує синтаксис та міркування за твердженням. коротше кажучи, він працює точно так само, як global
твердження, за винятком того, що він використовується для позначення змінних, які не є ні глобальними, ні локальними для функції.
Ось короткий приклад того, що можна зробити з цим. Генератор лічильників може бути переписаний для використання цього, щоб він більше нагадував ідіоми мов із закриттями.
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
Очевидно, ви можете написати це як генератор, наприклад:
def counter_generator():
count = 0
while True:
count += 1
yield count
Але хоча це ідеально ідіоматичний пітон, схоже, що перша версія була б трохи очевиднішою для початківців. Правильне використання генераторів, викликаючи повернуту функцію, є загальною точкою плутанини. Перша версія явно повертає функцію.