15

関数がn個の引数を取り、n個のアイテムを持つシーケンスを返す別の関数がある場合(またはn個のアイテムを持つシーケンスがある場合)、これら2つの関数を「マップ」する(または作成する)方法はありますか?最初の関数は、入力および戻り結果としてn個の項目のシーケンスを取ります)関数を自分で編集して、その引数パラメーターと戻り値の型を変更したくない(場合によってはできない場合もあります)。

すなわち)

def func1(x, y, z):
    return x+y+z

def func2(w):
    return [i for i in range(w,w+3)]

func1(func2( ... ))この場合はできません。

4

2 に答える 2

18

*args引数の構文を探しています:

>>> def foo(bar, baz, spam):
...     print bar, baz, spam
...
>>> arguments = [1, 2, 3]
>>> foo(*arguments)
1, 2, 3

引数を callable に渡すとき、*アスタリスクが前に付いている式は、一連の位置引数として解釈され、呼び出されたオブジェクト (関数、メソッドなど) に個別の引数として渡されるように展開されます。

あなたの例では、次のようになります。

func1(*func2(...))

**二重アスタリスク (マッピングを取る)を使用した同等のキーワードがあり、関数シグネチャでも同じ構文を使用できます。

呼び出し式に関するドキュメントを参照してください。また、関数シグネチャ ミラー構文については、関数定義に関するドキュメントを参照してください。

于 2012-10-08T17:00:15.333 に答える
12

これは引数アンパッキングと呼ばれ、次のように記述されます。

func1(*func2(...))

参照: https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists

于 2012-10-08T17:00:56.070 に答える