Переменные длины 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?

3 Solutions collect form web for “Переменные длины python (* args) расширяют генератор во время вызова функции?”

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

 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') 
  • Boost.Python и Boost.Function
  • Эффективная оценка функции в каждой ячейке массива NumPy
  • Как встроенная функция диапазона принимает один аргумент или три?
  • Принцип действия Аккермана
  • Python - лучшее место для общих функций
  • Python дает или возвращает генератор?
  • Python: как проверить, установлен ли дополнительный параметр функции
  • Рекурсивный метод для балансировки скобок
  • Python - лучший язык программирования в мире.