2016-08-16 13 views
0

私は3つのキーワードパラメータを取る関数を持っています。これはxとyのデフォルト値を持っているので、mapを使ってzの異なる値に対して関数を呼びたいと思います。私は、下のコードを実行すると、私は次のエラーを取得する:キーワード引数を持つpython partial

foo() got multiple values for keyword argument 'x'

def foo(x =1, y = 2, z = 3): 
    print 'x:%d, y:%d, z:%d'%(x, y, z) 


if __name__ == '__main__': 
    f1 = functools.partial(foo, x= 0, y = -6) 
    zz = range(10) 
    res = map(f1, zz) 

は、この問題を解決するためのPython的な方法はありますか?

+0

エラーを投げているコードに関する質問を投稿するときは、トレースバックを含めてください。 – wwii

+0

この例で示しているものとは異なる引数の組み合わせに対して、partialを作成しますか?部分コールシグネチャに* missing *引数の名前を指定する必要のない汎用ソリューションをお探しですか? – wwii

答えて

2

map(f1, zz)のようなものzz内のすべての要素に対して関数f1を呼び出そうとしたが、それは、引数がそれを行うためにどのと認識していない操作を行うことであろう。 partialfoox=0に再定義しましたが、mapは位置指定引数を使用するため、xを再割り当てしようとします。別の解決策は、関数のシグネチャに引数の順序を変更することであろう

res = map(lambda z: f1(z=z), zz) 

:このあなたが@mic4ael'sの答えのように単純なリストの内包表記を使用するか、またはmap内部にラムダを定義することができますいずれかに対抗するために

def foo(z=3, x=1, y=2): 
1

res = map(f1, zz)を内部で呼び出すと、実際には[f1(i) for i in range(10)のようになります。あなたが見ることができるように、f1はただ1つの位置引数(この場合はf1(x=i))で機能します。可能な解決策は、この

res = [f1(z=i) for i in range(10)] 
関連する問題