在* args中传递元组
问题描述:
我想将一个元组(或者可能是一个列表)作为一系列值(参数)传递给一个函数。该元组应当被解压到* arg中作为参数。在* args中传递元组
例如,这是明确的:
def func(*args):
for i in args:
print "i = ", i
func('a', 'b', 3, 'something')
但我想要做的是这样的:
tup = ('a1', 'a2', 4, 'something-else')
func(tup)
这应该表现类似于第一种情况。 我想我应该在这里使用重印和评估,但不知道如何。
我知道我可以在函数中传递元组,然后将其解包到主体中,但我的问题在于如何在函数调用中解压缩它。
答
您可以直接使用func(*tup)
在调用函数时解开元组。
>>> func(*tup)
i = a1
i = a2
i = 4
i = something-else
这是一种相当于func(tup[0], tup[1], tup[2], ...)
。同样也适用,如果函数需要多个单独的参数:
>>> def func2(a, b, c, d):
... print(a, b, c, d)
...
>>> func2(*tup)
('a1', 'a2', 4, 'something-else')
见例如here更深入的语法背景。
答
您可以在调用期间通过在元组的标识符前面加上*
来解开元组。这允许您轻松区分应该解压缩的元组和不应该解压缩的元组。这是一个例子:
>>> MyTuple = ('one', 2, [3])
>>>
>>> def func(*args):
... for arg in args:
... print(arg)
...
>>>
>>> func(*MyTuple)
one
2
[3]
>>>
>>> func(MyTuple)
('one', 2, [3])
只需使用'func(* tup)'。 –