如何在Python中原地解包列表或元组?

3

是否可以解包列表或元组,使得其中的值可以用作函数参数?也就是说,如何让第二行代码起作用?

f(1,2,3)
f(???([1,2,3]))

我当前手动进行此操作,类似于:

tmp1, tmp2, tmp3 = [1,2,3]
f(tmp1,tmp2,tmp3)

背景:我没有修改f()的能力,但它是代码生成器的一部分,所以奇怪的解决方案不是问题。


@NullUserException:这是针对函数签名的。语法看起来相同,但功能不同。 - Martijn Pieters
@NullUserException:这并不是说这个问题不是重复的,只是不是你提出的那一个。 - Martijn Pieters
@Martijn 我很确定这个问题以前已经被问过了。但我现在正在使用手机,所以很难查找。 - NullUserException
我有一堆重复的...但很难真正挑选哪一个... http://stackoverflow.com/q/14565032/748858,https://dev59.com/DWfWa4cB1Zd3GeqPf1Ax等。 - mgilson
@mgilson:是时候坚持一个并关闭其他重复的了吗? - Martijn Pieters
显示剩余3条评论
1个回答

13

是的,你可以使用*args(星号参数)语法:

f(*[1, 2, 3])

请参阅调用表达式文档

还有一个使用两个星号的关键字参数等价物:

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

函数签名中也有指定捕获所有参数的等效语法:

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

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