web-dev-qa-db-ja.com

関数を呼び出すときにリストを* argsに変換する

Pythonでは、リストを*argsに変換するにはどうすればよいですか?

私は知っている必要があります

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

*argsとして渡されるいくつかのtime_seriesオブジェクトが必要ですが、timeseriesオブジェクトのリストがあります。

112
andreas-h

Iterableの前に*演算子を使用して、関数呼び出し内で展開できます。例えば:

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

*の前のtimeseries_listに注意してください)

pythonドキュメント から:

構文* expressionが関数呼び出しに含まれる場合、expressionは反復可能に評価される必要があります。この反復可能からの要素は、追加の位置引数であるかのように扱われます。位置引数x1、...、xNがあり、expressionがシーケンスy1、...、yMに評価される場合、これはM + N位置引数x1、...、xN、y1、...との呼び出しと同等です。 ..、yM。

これは、pythonチュートリアルの 引数リストのアンパック というタイトルのセクションでも説明されています。このセクションでは、**演算子。

170
Bryan Oakley

はい、引数を関数に渡す* argを使用すると、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],)
>>> 
13
Ant

*argsは、関数が一般に同じタイプの多くの引数を取ることを意味します。

詳細については、Pythonチュートリアルの このセクション をご覧ください。

1
intuited