私は、次のコードを見た:入力引数**kw
はどういう意味Pythonの表記や操作 "**"
def __init__(self, fn, **kw):
[setattr(self,k,v) for (k,v) in kw.items()]
......
を?
私は、次のコードを見た:入力引数**kw
はどういう意味Pythonの表記や操作 "**"
def __init__(self, fn, **kw):
[setattr(self,k,v) for (k,v) in kw.items()]
......
を?
kw
は、dict
keyword argumentという名前の値にバインドされています。
はreturn_kwargs(foo=1, bar="2", baz="hamspamspam")
として
def return_kwargs(**kw):
return kw
を呼び出してみてください。
So.クラスの名前がFooであるとします。それから私はF =(Foo、a、b、c、d、e)のように作成することができます。次に、kw == {b:c、d:e} ??? –
@YanZhu:いいえ、 'Foo'を作成しない(a)、(b)' Foo(a、b、c、d、e) 'を意味するなら、キーワード引数は渡しません。値「a」から「e」まで。私が投稿したリンクを読んでください。 –
dict kw = {'a':1,'b':2}
があるとしたら、myfunction(**kw)
を呼び出すことは、myfunction(a=1,b=2)
を呼び出すのと同じです。
これは、関数宣言で '** kw'を使うのとは逆です。類似点はもちろん、事故ではありません。 – alexis
この特定の構成は、コンストラクタのすべてのキーワード引数がオブジェクト属性として終了することを意味します。
foo = Foo(func, bar = 1, baz = "aa")
これは属性「バー」を持つオブジェクトを1に設定し、「バズ」を作成しますが、「AA」機能インサイド
あなたは正しいですが、彼は '** kw'の部分についてしか尋ねません。属性マジックは 'setattr()'によって行われます。 – alexis
、kw
にすべてのキーワード=値の引数が含まれている辞書であること、あなた
def demo(**kw):
print kw
demo(a=1, b="hello")
上記を実行すると、aとbの2つのキーを持つ辞書が表示されます。したがって、関数を呼び出すときに使用するキーワード引数を受け入れる方法として機能します。
それはそうです。なぜ誰もそれをしたいと思いますか?おそらく、別の関数(別の引数として与えられる)を呼び出す関数で、**kw
は2番目の関数のオプションを保持します。
http://stackoverflow.com/questions/1769403/understanding-kwargs-in-python – San4ez