2010-07-07 17 views
17

Disons que j'ai une définition de méthode comme ceci:Comment puis-je faire exploser un tuple pour qu'il puisse être passé en liste de paramètres?

def myMethod(a, b, c, d, e) 

Ensuite, j'ai une variable et un tuple comme ceci:

myVariable = 1 
myTuple = (2, 3, 4, 5) 

Est-il possible que je peux passer exploser tuple de telle sorte que Je peux transmettre ses membres en tant que paramètres? Quelque chose comme ça (même si je sais que cela ne fonctionnera pas comme uplet entier est considéré comme le deuxième paramètre):

myMethod(myVariable, myTuple) 

Je voudrais éviter le référencement de chaque membre individuellement tuple si possible ...

+0

double possible de [Développement des tuples en arguments] (https://stackoverflow.com/questions/1993727/expanding-tuples-into-arguments) –

Répondre

33

vous êtes à la recherche de l'opérateur argument unpacking*:

myMethod(myVariable, *myTuple) 
+2

Fonctionne également pour les listes (pour le bénéfice de l'OP) –

+0

Fonctionne également pour les itérateurs. – unutbu

+0

Nice, merci! (Je pensais avoir lu sur une méthode ... encore assez nouveau pour Python et je ne savais pas trop comment la rechercher.) – froadie

7

de l'Python documentation:

La situation inverse se produit lorsque les arguments sont déjà dans une liste ou tuple mais doivent être décompactés pour un appel de fonction nécessitant des arguments positionnels distincts . Par exemple, la fonction intégrée range() attend des arguments de démarrage et d'arrêt distincts. Si ils ne sont pas disponibles séparément, écrire l'appel de fonction avec le * de -operator de déballer les arguments sur une liste ou tuple:

>>> range(3, 6)    # normal call with separate arguments 
[3, 4, 5] 
>>> args = [3, 6] 
>>> range(*args)   # call with arguments unpacked from a list 
[3, 4, 5] 

De la même façon, les dictionnaires peuvent livrer arguments mot-clé avec le ** - opérateur:

>>> def parrot(voltage, state='a stiff', action='voom'): 
...  print "-- This parrot wouldn't", action, 
...  print "if you put", voltage, "volts through it.", 
...  print "E's", state, "!" 
... 
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"} 
>>> parrot(**d) 
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !