2012-06-16 12 views
5

Diciamo che c'è una funzione func() che accetta due argomenti, a e b. Esiste un qualche tipo di tecnica in Python per passare una singola lista mylist che ha invece entrambi i valori sulla funzione?passando una lista di valori invece di argomenti mutiple a una funzione?

def myfunc(a, b): 
    return a+b 

myfunc([1, 2]) 

Se uno era del tutto sicuro che lui era sempre chiamando la stessa funzione e sapeva quanti argomenti ci vuole, si potrebbe fare qualcosa di simile:

mylist = [1, 2] 
a, b = mylist 

myfunc(a, b) 

Ma cosa succede se si dispone di elenchi di cui avete bisogno alimentare alcune funzioni e ognuna ha una quantità diversa di argomenti? Si potrebbero scrivere righe di codice separate per ciascuna delle sue funzioni per decomprimere le liste in variabili e passarle alle funzioni corrispondenti, ma se Python ha qualcosa di built-in per passare una singola lista invece dei singoli valori degli argomenti (quando si è sicuri in anticipo quella lista ha la quantità corrispondente di valori), quindi sarebbe molto meglio e, soprattutto, richiederebbe molto meno linee di codice.

risposta

8

È possibile utilizzare *-unpack the list into arguments:

myfunc(*mylist) 
+3

sapevo Python sarebbe qualcosa di simile! –

+3

@ user975135 Questo può essere fatto anche con dicts, che è utile per argomenti di parole chiave o funzioni di chiamata con molti argomenti: 'mydict = {'a': 1, 'b': 2}' 'myfunc (** mydict)' – Darthfett

4
def myfunc(a, b): 
    return a+b 

mylist = [1, 2] 
myfunc(*mylist) 

Qui mylist può essere list, tuple, string ecc di lunghezza 2.

+0

+1, può essere qualsiasi sequenza, non solo una lista – PaulMcG

Problemi correlati