在* args传递一个元组

时间:2017-10-17 15:45:58

标签: 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)

这应该与第一种情况类似。 我想我应该在这里使用转载和评估,但不确定究竟是如何。

我知道我可以在函数中传递元组,然后在体内解压缩,但我的问题是如何在函数调用中解压缩它。

3 个答案:

答案 0 :(得分: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有关语法的更深入的背景知识。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果要打开元组,可以使用* 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