Переменные длины python (* args) расширяют генератор во время вызова функции?

Рассмотрим следующий код Python:

def f(*args): for a in args: pass foo = ['foo', 'bar', 'baz'] # Python generator expressions FTW gen = (f for f in foo) f(*gen) 

*args ли *args автоматическое расширение генератора во время вызова? Иными словами, я повторяю два раза в gen внутри f(*gen) , один раз, чтобы развернуть *args и один раз перебирать аргументы? Или генератор сохраняется в первозданном состоянии, а итерация происходит только один раз во время цикла for?

Генератор расширяется во время вызова функции, так как вы можете легко проверить:

 def f(*args): print(args) foo = ['foo', 'bar', 'baz'] gen = (f for f in foo) f(*gen) 

распечатает

 ('foo', 'bar', 'baz') 

Почему бы не посмотреть и посмотреть, что gen в f() ? Добавьте print args в первую строку. Если это еще объект генератора, он вам скажет. Я ожидаю, что аргумент распакуется, чтобы превратить его в кортеж.

Тебе не нужны

 gen = (f for f in foo) 

призвание

 f(*foo) 

выйдет

 ('foo', 'bar', 'baz')