def foo(a, b, c):
print a+b+c
i = [1,2,3]
C'è un modo per chiamare foo (i) senza indicizzazione esplicita su i? Cercando di evitare foo (i [0], i [1], i [2])Esiste un modo più plateale di esplodere una lista sugli argomenti di una funzione?
def foo(a, b, c):
print a+b+c
i = [1,2,3]
C'è un modo per chiamare foo (i) senza indicizzazione esplicita su i? Cercando di evitare foo (i [0], i [1], i [2])Esiste un modo più plateale di esplodere una lista sugli argomenti di una funzione?
Sì, utilizzare foo(*i)
:
>>> foo(*i)
6
È inoltre possibile utilizzare *
nella definizione di funzione: def foo(*vargs)
mette tutti gli argomenti non di parole chiave in una tupla chiamato vargs
. . e l'uso di **
, per esempio, def foo(**kargs)
, metterà tutti gli argomenti delle parole chiave in un dizionario chiamato kargs
:
>>> def foo(*vargs, **kargs):
print vargs
print kargs
>>> foo(1, 2, 3, a="A", b="B")
(1, 2, 3)
{'a': 'A', 'b': 'B'}
Sì, Python supporta che:
foo(*i)
consultare la documentazione Unpacking Argument Lists. Funziona con qualsiasi cosa iterabile. Con due stelle **
funziona per dicts e argomenti con nome.
def bar(a, b, c):
return a * b * c
j = {'a': 5, 'b': 3, 'c': 2}
bar(**j)
Si chiama argument unpacking e c'è un operatore per esso.
foo(*i)
A proposito, funziona con qualsiasi iterabile, non solo con le liste.
+1 per aver lasciato cadere il nome del gioco. in realtà questo è ciò che aiuta a google questa cosa per qualsiasi lingua. Molte grazie. –
Utilizzato molte volte nella definizione di funzione, quindi perché non usarlo quando si chiama ... Grazie per aver ripristinato i miei ragazzi testa di pitone. – rutherford