2010-10-15 166 views
71

在Python中,如何將列表轉換爲* args?將列表轉換爲Python中的* args

我需要知道,因爲函數

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

希望爲* ARGS通過幾個time_series對象,而我有時間序列對象的列表。

任何幫助是極大的讚賞:)

回答

116

可以使用*操作前可迭代的函數調用內展開。例如:

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

(注意*timeseries_list

python documentation

如果語法*表達出現在函數調用,表達 必須計算爲一個迭代。來自此迭代器的元素被視爲 ,就好像它們是附加的位置參數一樣;如果存在位置參數x1,...,xN,並且表達式求值爲 序列y1,...,yM,則這相當於具有M + N位置 自變量x1,...,xN的呼叫, y1,...,yM。

+4

忘記這一點:http://docs.python.org/reference/expressions.html#calls – 2010-10-15 11:03:42

1

*args只是表示該函數需要大量的參數,通常是相同的類型。

請參閱Python教程中的this section瞭解更多信息。

+0

我覺得OP已經知道這一點。該函數需要多個參數,但他們有一個單一的列表,他們想要通過多個參數。 – 2010-10-15 12:37:45

+0

@Bryan Oakley:我鏈接的文檔解釋瞭如何做到這一點。 – intuited 2010-10-15 12:52:37

+4

雖然這是真的,但是你的答案聽起來像指向其他地方的鏈接。我想你的答案會更有用,如果你將它解釋爲解開包裝而不是* args的含義。 – 2010-10-15 13:56:25

10

是的,使用* arg將args傳遞給一個函數會使python在arg中解壓值並將其傳遞給函數。

這樣:

>>> 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],) 
>>>