2010-10-15 21 views
71

W języku Python, jak przekonwertować listę na * argumenty?Konwertowanie listy na * argumenty w języku Python

Muszę wiedzieć, ponieważ funkcja

scikits.timeseries.lib.reportlib.Report.__init__(*args) 

chce kilka time_series obiekty przekazywane jako * args, natomiast mam listę obiektów timeseries.

Każda pomoc jest mile widziana :)

Odpowiedz

116

Można użyć operatora * zanim iterable rozszerzyć go w wywołaniu funkcji. Na przykład:

timeseries_list = [timeseries1 timeseries2 ...] 
r = scikits.timeseries.lib.reportlib.Report(*timeseries_list) 

(zauważyć * przed timeseries_list)

Z python documentation:

Jeśli składnia * wyrażenie pojawia się w wywołaniu funkcji, ekspresja musi ocenić na iterable. Elementy z tej iteracji traktowane są jako tak, jakby były dodatkowymi argumentami pozycyjnymi; jeśli istnieją argumenty pozycyjne x1, ..., xN i wyrażenia, to sekwencja y1, ..., yM, jest to odpowiednik wywołania z argumentami M + N w pozycjach x 1, ..., xN, y1, ..., yM.

+4

pamiętasz to: http://docs.python.org/reference/expressions.html#calls –

1

*args oznacza po prostu, że funkcja przyjmuje szereg argumentów, generalnie tego samego typu.

Zapoznaj się z this section w samouczku w języku Python, aby uzyskać więcej informacji.

+0

myślę PO już o tym wie. Funkcja przyjmuje wiele argumentów, ale mają jedną listę, którą chcą przekazać jako wiele argumentów. –

+0

@Bryan Oakley: Dokumenty, które podłączyłem, wyjaśniają, jak to zrobić. – intuited

+4

podczas gdy to prawda, sposób w jaki sformułowałeś twoją odpowiedź, brzmi jak link do innego miejsca. Myślę, że twoja odpowiedź będzie bardziej przydatna, jeśli zmienisz ją na adres rozpakowywania, a nie to, co znaczy * args. –

10

tak, użycie argumentu * arg przekazującego args do funkcji sprawi, że pyton rozpakuje wartości w arg i przekazuje je do funkcji.

tak:

>>> def printer(*args): 
print args 


>>> printer(2,3,4) 
(2, 3, 4) 
>>> printer(*range(2, 5)) 
(2, 3, 4) 
>>> printer(range(2, 5)) 
([2, 3, 4],) 
>>> 
Powiązane problemy