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

Posted

技术标签:

【中文标题】将列表传递给函数以充当多个参数【英文标题】:Pass a list to a function to act as multiple arguments 【发布时间】:2011-03-29 15:42:26 【问题描述】:

我认为这里的“解包”可能是错误的词汇 - 抱歉,因为我确定这是一个重复的问题。

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

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

肯定有办法扩展列表,并通过函数'red','blue','orange' 吗?

【问题讨论】:

【参考方案1】:
function_that_needs_strings(*my_list) # works!

You can read all about it here.

【讨论】:

【参考方案2】:

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

function_that_needs_strings(*my_list)

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

请参阅call expression documentation。

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

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

还有equivalent syntax 用于在函数签名中指定包罗万象的参数:

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

【讨论】:

【参考方案3】:

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

PEP 448 - Additional Unpacking Generalizations

所以这会起作用:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)

【讨论】:

如何使用 python 2.7 或 3.4 做同样的事情? @answerSeeker 效率不高,但 function_that_needs_strings(*(a+b)) 哇,真不敢相信在此之前你做不到。 @answerSeeker 更高效:function_that_needs_strings(*itertools.chain(a, b))

以上是关于将列表传递给函数以充当多个参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量结构类型传递给 C 中的函数

将一个值列表而不是多个参数传递给函数?

将数组传递给 PostgreSQL PL/pgSQL 函数

如何将多个参数作为单个向量传递给函数?

如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?

仅将一些参数作为 R 中的命名列表传递给函数