2017-10-17 112 views
2

我想将一个元组(或者可能是一个列表)作为一系列值(参数)传递给一个函数。该元组应当被解压到* 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) 

这应该表现类似于第一种情况。 我想我应该在这里使用重印和评估,但不知道如何。

我知道我可以在函数中传递元组,然后将其解包到主体中,但我的问题在于如何在函数调用中解压缩它。

+6

只需使用'func(* tup)'。 –

回答

1

您可以直接使用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更深入的语法背景。

0

您可以在调用期间通过在元组的标识符前面加上*来解开元组。这允许您轻松区分应该解压缩的元组和不应该解压缩的元组。这是一个例子:

>>> MyTuple = ('one', 2, [3]) 
>>> 
>>> def func(*args): 
... for arg in args: 
... print(arg) 
... 
>>> 
>>> func(*MyTuple) 
one 
2 
[3] 
>>> 
>>> func(MyTuple) 
('one', 2, [3])