Преобразование списка в * args при вызове функции


в Python, как преобразовать список в * args?

Мне нужно знать, потому что функция

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

хочет, чтобы несколько объектов time_series передавались как * args, тогда как у меня есть список объектов timeseries.

любая помощь очень ценится :)

3 89

3 ответа:

можно использовать * оператор перед итерацией, чтобы развернуть его в вызове функции. Например:

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

(уведомление * до timeseries_list)

С документация python:

если синтаксис *выражение появляется в вызове функции, выражения необходимо вычислить итерацию. Элементы из этой итерации обрабатываются как если бы они были дополнительные аргументы, если есть позиционный аргументы Х1, ..., xN, и выражение принимает значение a последовательность y1, ..., yM, это эквивалентно вызову с m + n позиционным аргументы Х1, ..., xN, y1, ...- да.

Это также рассматривается в учебнике python, в разделе под названием распаковка списков аргументов, где также показано, как сделать аналогичную вещь со словарями для ключевых аргументов с ** оператора.

да, использование * 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],)
>>> 

*args просто означает, что функция принимает ряд аргументов, как правило, одного и того же типа.

проверить в этом разделе в учебнике Python для получения дополнительной информации.