关于python:在*参数中传递元组

passing a tuple in *args

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

例如,这很明显:

1
2
3
4
5
def func(*args):
    for i in args:
        print"i =", i

func('a', 'b', 3, 'something')

但我想做的是:

1
2
tup = ('a1', 'a2', 4, 'something-else')
func(tup)

这应该和第一种情况类似。我想我应该在这里转载和评估,但不确定具体如何。

我知道我可以在函数中传递元组,然后在主体中解包它,但这里的问题是如何在函数调用本身中解包它。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> 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)直接解包元组。

1
2
3
4
5
>>> func(*tup)
i =  a1
i =  a2
i =  4
i =  something-else

这就相当于func(tup[0], tup[1], tup[2], ...)。如果函数需要多个单独的参数,也可以这样做:

1
2
3
4
5
>>> def func2(a, b, c, d):
...     print(a, b, c, d)
...
>>> func2(*tup)
('a1', 'a2', 4, 'something-else')

有关语法的更深入背景,请参见此处的示例。


如果要解包元组,可以使用*参数。方法定义如下:

1
2
3
def func(*tup):
    for i in tup:
        print(print"i =",i)

现在调用您的方法:

1
2
tup = ('a1','a1',4,'something-else')
func(*tup)

它将产生你的输出作为-

1
2
3
4
i = a1
i = a2
i = 4
i = something-else