Розпакуйте список у 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'на копита?

Відповіді:



32

Так, ви можете використовувати *argsсинтаксис (splat):

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)

1
як я можу зробити те ж саме з python 2.7 або 3.4?
відповідьПереглядач

1
@answerSeeker не ефективний, алеfunction_that_needs_strings(*(a+b))
azalea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.