用Python解压缩列表?

AP2*_*257 189 python list argument-passing

我认为'解包'可能是错误的词汇 - 道歉,因为我确信这是一个重复的问题.

我的问题很简单:在一个需要项目列表的函数中,如何在不出错的情况下传递Python列表项?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!
Run Code Online (Sandbox Code Playgroud)

当然必须有一种方法来扩展列表,并'red','blue','orange'在蹄上传递函数?

Mar*_*ers 25

是的,您可以使用*args(splat)语法:

function_that_needs_strings(*my_list)
Run Code Online (Sandbox Code Playgroud)

哪里my_list可以是任何可迭代的; Python将遍历给定对象并使用每个元素作为函数的单独参数.

请参阅调用表达式文档.

还有一个关键字参数等价,使用两颗星:

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)
Run Code Online (Sandbox Code Playgroud)

并且在函数签名中指定catch-all参数的语法相同:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments
Run Code Online (Sandbox Code Playgroud)


vis*_*ell 9

从Python 3.5开始,您可以解压缩无限量的lists.

PEP 448 - 附加拆包概括

所以这将有效:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)
Run Code Online (Sandbox Code Playgroud)

  • @answerSeeker 效率不高,但`function_that_needs_strings(*(a+b))` (3认同)