Распаковать список в Python?

222

Я думаю, что «распаковать» может быть неправильный словарь здесь - извинения, потому что я уверен, что это дублирующий вопрос.

Мой вопрос довольно прост: в функции, которая ожидает список элементов, как я могу передать элемент списка Python без получения ошибки?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

Наверняка должен быть способ расширить список и передать функцию 'red','blue','orange'на копыте?

AP257
источник

Ответы:

32

Да, вы можете использовать *argsсинтаксис:

function_that_needs_strings(*my_list)

где my_listможет быть любая итерация; Python будет перебирать данный объект и использовать каждый элемент в качестве отдельного аргумента функции.

Смотрите документацию по выражению вызова .

Также есть эквивалент ключевого параметра, использующий две звезды:

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

и есть эквивалентный синтаксис для указания универсальных аргументов в сигнатуре функции:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments
Мартейн Питерс
источник
14

Начиная с Python 3.5 вы можете распаковать неограниченное количество lists.

PEP 448 - Дополнительные обобщения распаковки

Так что это будет работать:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
vishes_shell
источник
1
Как я могу сделать то же самое с Python 2.7 или 3.4?
answerSeeker
1
@answerSeeker не эффективен, ноfunction_that_needs_strings(*(a+b))
азалия