передача нескольких аргументов в python по циклу - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть функция, которая принимает несколько аргументов кортежей и обрабатывает их соответственно.Мне было интересно, могу ли я передать аргументы в цикле for.Например:

def func(*args):
   for a in args:
      print(f'first {a[0]} then {a[1]} last {a[2]}')

Тогда я бы назвал функцию как

func(('is', 'this', 'idk'), (1,2,3), ('a', '3', 2))

Мой вопрос, есть ли способ, которым я мог бы изменить функцию, вызывающую вцикл без изменения самого определения функции:

func((i, i, i) for i in 'yes'))

такой, что он напечатает:

first y then y last y
first e then e last e
first s then s last s

1 Ответ

0 голосов
/ 04 февраля 2019

Да, с выражением генератора и * аргумент распаковки в вызове:

func(*((i, i, i) for i in 'yes'))

, который также может быть записан с назначенным выражением генераторасначала к переменной:

args = ((i, i, i) for i in 'yes')
func(*args)

Демо:

>>> func(*((i, i, i) for i in 'yes'))
first y then y last y
first e then e last e
first s then s last s
>>> args = ((i, i, i) for i in 'yes')
>>> func(*args)
first y then y last y
first e then e last e
first s then s last s
...