在Python中,如何將列表轉換爲* args?將列表轉換爲Python中的* args
我需要知道,因爲函數
scikits.timeseries.lib.reportlib.Report.__init__(*args)
希望爲* ARGS通過幾個time_series對象,而我有時間序列對象的列表。
任何幫助是極大的讚賞:)
在Python中,如何將列表轉換爲* args?將列表轉換爲Python中的* args
我需要知道,因爲函數
scikits.timeseries.lib.reportlib.Report.__init__(*args)
希望爲* ARGS通過幾個time_series對象,而我有時間序列對象的列表。
任何幫助是極大的讚賞:)
可以使用*
操作前可迭代的函數調用內展開。例如:
timeseries_list = [timeseries1 timeseries2 ...]
r = scikits.timeseries.lib.reportlib.Report(*timeseries_list)
(注意*
前timeseries_list
)
如果語法*表達出現在函數調用,表達 必須計算爲一個迭代。來自此迭代器的元素被視爲 ,就好像它們是附加的位置參數一樣;如果存在位置參數x1,...,xN,並且表達式求值爲 序列y1,...,yM,則這相當於具有M + N位置 自變量x1,...,xN的呼叫, y1,...,yM。
*args
只是表示該函數需要大量的參數,通常是相同的類型。
請參閱Python教程中的this section瞭解更多信息。
我覺得OP已經知道這一點。該函數需要多個參數,但他們有一個單一的列表,他們想要通過多個參數。 – 2010-10-15 12:37:45
@Bryan Oakley:我鏈接的文檔解釋瞭如何做到這一點。 – intuited 2010-10-15 12:52:37
雖然這是真的,但是你的答案聽起來像指向其他地方的鏈接。我想你的答案會更有用,如果你將它解釋爲解開包裝而不是* args的含義。 – 2010-10-15 13:56:25
是的,使用* 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],)
>>>
忘記這一點:http://docs.python.org/reference/expressions.html#calls – 2010-10-15 11:03:42