2012-09-18 12 views
5

Given krotki Pythona t = v1, v2, v3 jest tam narzędzie do rozpakowywania nich tak, że biorąc pod uwagę:Python 3: Odwinąć argumentów krotki

def foo(v1,v2,v3): pass 

Zamiast tego:

foo(t[0],t[1],t[2]) 

Można to zrobić:

foo(unpack(t)) 

Chciałbym poznać takie narzędzie dostępne dla krotek i/lub list.

Serdeczne dzięki.

Odpowiedz

14

Tak. Można użyć operatora rozpakowywania ('*')

foo(*t) 

Zauważ, że to działa, jeśli t jest list, tuple, a nawet generator


Jest analogiczny sposób przekazywać argumenty do funkcji za pomocą słów kluczowych za pomocą operatora ** obiektów mapowania (zazwyczaj słowników):

def foo(key=None,foo=None): 
    pass #... 

foo(**{key:1,foo:2}) 
1

Zastosowanie *args argumentem Podania:

foo(*t) 

Demo:

>>> def foo(v1, v2, v3): 
...  print(v1, v2, v3) 
... 
>>> t = 1, 2, 3 
>>> foo(*t) 
1 2 3 
2

Unpack lista argumentów:

foo(*(v1, v2, v3))