Почему эта программа на Python имеет следующий вывод?
def makeInc (x, step):
def next():
nonlocal x, step
x = x + step
return x
return next
x = makeInc (0, 1)
y = makeInc (0, 10)
x1=x()
x2=x()
y1=y()
y2=y()
print( x1, x2, y1, y2)
Вывод 1 2 10 20. Я не уверен, почему он дает эти выводы, кто-нибудь может объяснить это подробно? Спасибо!
1 ответ
Функция makeInc()
это "фабрика", которая создает функциональные объекты и возвращает их. nonlocal
объявление делает функцию "закрыть над" переменной. Обычно вы делаете явную переменную и закрываете ее; в этом случае нелокальное объявление закрывается над переменной аргумента из makeInc()
,
Если вы хотите узнать о замыканиях и nonlocal
Вот несколько ссылок:
http://www.mondoinfo.com/blog/C182263547/E20060918200706/index.html
Нелокальное утверждение Python
Так, makeInc()
создает функциональный объект, который имеет начальное значение и "шаг", на который начальное значение будет увеличиваться. Как только вы создали объект пользовательской функции, окончательный код вызывает функции и получает увеличивающиеся значения.