Почему эта программа на 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() создает функциональный объект, который имеет начальное значение и "шаг", на который начальное значение будет увеличиваться. Как только вы создали объект пользовательской функции, окончательный код вызывает функции и получает увеличивающиеся значения.

Другие вопросы по тегам