Python 在*args中传递元组

Python 在*args中传递元组,python,eval,args,Python,Eval,Args,我想将一个元组(或者一个列表)作为一个值序列(参数)传递给函数。然后应将元组作为参数解压缩到*arg中 例如,这一点很清楚: def func(*args): for i in args: print "i = ", i func('a', 'b', 3, 'something') 但我想做的是: tup = ('a1', 'a2', 4, 'something-else') func(tup) 这应该与第一种情况类似。 我想我应该在这里转载和评估,但不知道如何准确

我想将一个元组(或者一个列表)作为一个值序列(参数)传递给函数。然后应将元组作为参数解压缩到*arg中

例如,这一点很清楚:

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')

有关语法的更深入背景信息,请参见,例如。

您可以在调用过程中通过在元组标识符之前放置一个
*
来解压缩元组。这使您能够轻松区分应该解包的元组和不应该解包的元组。这是一个例子:

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

如果要解压缩元组,可以使用*args。 您的方法定义如下所示:

def func(*tup):
    for i in tup:
        print(print "i = ",i)
现在调用您的方法:

tup = ('a1','a1',4,'something-else') 
func(*tup)
这将产生如下输出:-

i = a1
i = a2
i = 4
i = something-else
只需使用
func(*tup)