将列表传递给函数以充当多个参数

282

在一个期望传入一组项目的函数中,我如何传递 Python 列表项而不会出现错误?

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

肯定有一种方法可以扩展列表,并且在传递函数'red','blue','orange'时快速完成。我认为这被称为“解包”。

3个回答

362

50

是的,你可以使用*args(展开)语法:

function_that_needs_strings(*my_list)

其中my_list可以是任何可迭代对象;Python会循环遍历给定的对象,并将每个元素作为函数的单独参数使用。

请参阅调用表达式文档

还有一个关键字参数等效形式,使用两个星号:

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

在函数签名中,还有equivalent syntax指定catch-all参数的等效语法:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments

19

1
我该如何使用Python 2.7或3.4实现相同的功能? - answerSeeker
3
@answerSeeker 这不是高效的,但是 function_that_needs_strings(*(a+b)) 需要字符串。 - azalea
哇,真想不到你以前做不到。 - TheTechRobo the Nerd
@answerSeeker 更高效:function_that_needs_strings(*itertools.chain(a, b)) - limitedeternity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接