def foo(a, b, c):
print a+b+c
i = [1,2,3]
Czy istnieje sposób wywołania foo (i) bez jawnego indeksowania na i? Próby uniknięcia Foo (I [0] i [1] i [2]),Czy istnieje bardziej pytonowy sposób eksplodowania listy przez argumenty funkcji?
def foo(a, b, c):
print a+b+c
i = [1,2,3]
Czy istnieje sposób wywołania foo (i) bez jawnego indeksowania na i? Próby uniknięcia Foo (I [0] i [1] i [2]),Czy istnieje bardziej pytonowy sposób eksplodowania listy przez argumenty funkcji?
Tak, użyj foo(*i)
:
>>> foo(*i)
6
Można również użyć *
w definicji funkcji: def foo(*vargs)
umieszcza wszystkie argumenty niż słowa kluczowe w nazwie krotki vargs
. . i wykorzystanie **
, dla np, def foo(**kargs)
będzie umieścić wszystkie argumenty słownika słów kluczowych w nazwie kargs
:
>>> def foo(*vargs, **kargs):
print vargs
print kargs
>>> foo(1, 2, 3, a="A", b="B")
(1, 2, 3)
{'a': 'A', 'b': 'B'}
Tak Pythonie że:
foo(*i)
Patrz dokumentację Unpacking Argument Lists. Działa z każdą iteracją. Z dwiema gwiazdami **
działa dla dyktowanych i nazwanych argumentów.
def bar(a, b, c):
return a * b * c
j = {'a': 5, 'b': 3, 'c': 2}
bar(**j)
Nazywa argument unpacking i tam operator dla niego.
foo(*i)
Nawiasem mówiąc, działa z każdą iteracją, nie tylko z listami.
+1 za zrzucenie nazwy gry. w rzeczywistości to, co pomaga google to coś dla dowolnego języka. Wielkie dzięki. –
Używany wielokrotnie w definicji funkcji, więc dlaczego jej nie używać podczas dzwonienia ... Dzięki za odwrócenie mej głowy. – rutherford