Прежде всего, функции - это просто значения.Ваша внешняя функция назначена переменной iter
.Эта функция возвращает анонимную функцию.(«Аноним» просто означает, что вы не дали функции имя перед ее возвратом.)
Во-вторых, список аргументов в скобках - это, по сути, оператор, вызывающий функцию (если только это не указано в объявлении функции).Когда вы используете этот оператор, функция запускается, и выражение приводит к возвращаемому значению.
В операторе iter()
вы вызываете функцию и игнорируете ее возвращаемое значение, поэтому вы никогда не увидите внутреннюю функциюrun.
В операторе it = iter()
вы получите именованную функцию с именем it
.Каждый раз, когда вы вызываете его, он увеличивает переменную i
изнутри вызова iter
, который ее создал.
В качестве примечания было бы правильно сказать iter()()
, чтобы немедленно вызвать возвращенную функцию,Это на самом деле не было бы полезно в вашем случае, потому что каждый вызов iter
возвращает новое закрытие с i
, начинающимся с нуля.