2012-04-12 8 views
1

「**キーワードの仮パラメータ」の目的は正確に何ですか?私はそれを引用で引用しています。なぜならそれはドキュメントの中で言及されているものですが、私はそれに関する情報を見つけるのが難しく、正式な用語があると思っていました。**キーワードの正式なパラメータ

私が理解から、それはユーザーが

def foo(**keywords): 
    for i in keywords: 
     print(i, ":", keywords[i]) 

foo(val1="1", val2="2", val3="3") 

出力のような何かを行うことができます:

val1 : 1 
val2 : 2 
val3 : 3 

まさにこのことの利点は何を?辞書変数を渡すことは、理解を容易にするためにうまくいかないでしょうか?

+0

どこにあるのですか?リンクしてください。 – agf

+0

@agf [py2.xドキュメント](http://docs.python.org/tutorial/controlflow.html#keyword-arguments) [py3.xドキュメント](http://docs.python.org /py3k/tutorial/controlflow.html#default-argument-values) – Preom

+1

"仮パラメータ"とは、関数が呼び出されたときにそのパラメータに関連付けられた値ではなく、関数定義に現れるパラメータを指します。パラメータ "となる。したがって、 "形式の仮引数..."は、 "**関数キーワードとして使用されるキーワード"を意味します。それはそのタイプの議論の名前の一部ではありません。 – agf

答えて

2

、関数を呼び出すことは次のようになります。

myfunv({"key1": "value1", "key2": "value2"}) 

使用** kwargsからこれは

myfunc(key1="value1", key2="value2") 

多くの人々が、後者のほうになります。

この構文は、他の関数またはクラスに引数を透過的に渡す場合にも非常に便利です。たとえば、私はTkinterウィジェットをサブクラス化するときにこれをたくさん使用します。私は、基本クラスのオプションのすべてをサポートしたいので、私はこのようにそれをコーディング:

class MyFrame(tk.Frame): 
    def __init__(self, *args, **kwargs): 
     tk.Frame.__init__(self, *args, **kwargs) 
     <more code here> 

これは私が明示的にそれらをすべてリストアップすることなく、すべて同じ引数をサポートすることができます。

0

この構文では、呼び出し側は標準のキーワード引数を使用できます。

+0

どういう意味ですか? –

+1

呼び出し側は、関数定義に「通常の」方法を定義したかのように、別の方法でアクセスしていることを知らずに、キーワード引数を使用できます。 –

+0

ああ、今、それを得る、ありがとう。 –

1

パラメータを転送するときに使用します。たとえば:あなたはdo_some_workにパラメータを追加する場合

def do_some_work(kwd1=None, kwd2=None, ...): 
    .... 

def intermediate_function(some_other_params, **kwargs): 
    ... 
    do_some_work(**kwargs) 

def main(): 
    intermediate_function(some_other_params, kwd1=5, kwd2='foo') 

そのように、あなたはintermediate_functionの定義とそこに内do_some_workへの呼び出しの両方に追加する必要はありません。


もう1つの場所はDjangoのシグナルハンドラです。あなたはハンドラを記述すると、フォームに書き込む

APIを使用することはありません方法の束にパラメータを追加行くために、ユーザーを必要とせずに、将来的に追加の引数を渡すように変更することができるように
def handle_signal(sender, instance, **kwargs): 

それら。

0

これまで、パラメータの受け渡しは、位置指定またはキーワード引数を使用して行われていました。パラメータとして複雑なオブジェクトを渡すと、比較的最近追加されたと

  1. そのシンプルな
  2. 可読性が

さて、概念を拡張渡す変数の位置やキーワード引数ときをパラメータとして人々が通過値のより快適です支持されて上記構築物を生じる。

興味深いことに、コンストラクタを使っても辞書は引き続き使用できますが、その責任感のあるプログラマが望ましくない意図はあまり明確になりません。あなたは辞書を使用する場合は

関連する問題