将列表传递给函数以充当多个参数
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 开始,您可以解压缩无限数量的 list
s。
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))
以上是关于将列表传递给函数以充当多个参数的主要内容,如果未能解决你的问题,请参考以下文章