2017-10-17 3 views
2

Je voudrais passer un tuple (ou peut-être une liste) à une fonction comme une séquence de valeurs (arguments). Le tuple doit ensuite être décompressé en tant qu'argument dans * arg.passant un tuple dans * args

Par exemple, cela est clair:

def func(*args): 
    for i in args: 
     print "i = ", i 

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

Mais ce que je veux faire est la suivante:

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

Et cela devrait se comporter semblable au premier cas. Je pense que je devrais utiliser ici réimpression et eval mais je ne sais pas exactement comment.

Je sais que je peux passer le tuple dans la fonction puis le décompresser dans le corps, mais ma question ici est de savoir comment déballer dans la fonction elle-même appel.

+6

Utilisez simplement func (* tup) '. –

Répondre

1

Vous pouvez simplement utiliser func(*tup) pour déballer le tuple directement lorsque vous appelez la fonction.

>>> func(*tup) 
i = a1 
i = a2 
i = 4 
i = something-else 

Ceci équivaut à func(tup[0], tup[1], tup[2], ...). La même chose fonctionne également si la fonction attend plusieurs paramètres individuels:

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

Voir par ex. here pour plus d'informations sur la syntaxe.

0

Vous pouvez décompresser le tuple pendant l'appel en mettant un * devant l'identifiant du tuple. Cela vous permet de différencier facilement les tuples qui doivent être déballés et ceux qui ne le devraient pas. Voici un exemple:

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