Преобразование списка в * args при вызове функции
в Python, как преобразовать список в * args?
Мне нужно знать, потому что функция
scikits.timeseries.lib.reportlib.Report.__init__(*args)
хочет, чтобы несколько объектов time_series передавались как * args, тогда как у меня есть список объектов timeseries.
любая помощь очень ценится :)
3 ответа:
можно использовать
*
оператор перед итерацией, чтобы развернуть его в вызове функции. Например:timeseries_list = [timeseries1 timeseries2 ...] r = scikits.timeseries.lib.reportlib.Report(*timeseries_list)
(уведомление
*
доtimeseries_list
)если синтаксис *выражение появляется в вызове функции, выражения необходимо вычислить итерацию. Элементы из этой итерации обрабатываются как если бы они были дополнительные аргументы, если есть позиционный аргументы Х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 для получения дополнительной информации.