Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

(обратите внимание на * перед timeseries_list)

Из документации по питону:

Если выражение синтаксиса * появляется в вызове функции, выражение должно быть итеративным. Элементы из этой итерации обрабатываются так, как если бы они были дополнительными позиционными аргументами; если есть позиционные аргументы x1,..., xN, и выражение оценивается как последовательность y1,..., yM, это эквивалентно вызову с M + N позиционными аргументами x1,..., xN, y1,..., гм

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

Ответ 2

yes, используя * 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],)
>>> 

Ответ 3

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

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