Передача списка функции в качестве нескольких аргументов
В функции, которая ожидает список элементов, как я могу передать элемент списка Python без получения ошибки?
my_list = ['red', 'blue', 'orange']function_that_needs_strings('red', 'blue', 'orange') # works!function_that_needs_strings(my_list) # breaks!
Наверняка должен быть способ расширить список и передать функцию 'red','blue','orange' на копыте? Я думаю, это называется "распаковка".
'red','blue','orange'
Переведено автоматически
Ответ 1
function_that_needs_strings(*my_list) # works!
Вы можете прочитать все об этом здесь: Распаковка списков аргументов - Учебное пособие по Python
Ответ 2
Да, вы можете использовать *args (splat) синтаксис:
*args
function_that_needs_strings(*my_list)
где my_list может быть любой итерируемый; Python будет выполнять цикл по данному объекту и использовать каждый элемент в качестве отдельного аргумента функции.
my_list
Смотрите Документацию по выражению вызова.
Также существует эквивалент ключевого слова-параметра, использующий две звездочки:
kwargs = {'foo': 'bar', 'spam': 'ham'}f(**kwargs)
и существует эквивалентный синтаксис для указания универсальных аргументов в сигнатуре функции:
def func(*args, **kw): # args now holds positional arguments, kw keyword arguments
Ответ 3
Начиная с Python 3.5, вы можете распаковывать неограниченное количество listфайлов.
list
PEP 448 - Дополнительные обобщения при распаковке
Итак, это сработает:
a = ['1', '2', '3', '4']b = ['5', '6']function_that_needs_strings(*a, *b)