“ラムダバインディング”とはPythonで?
質問
Pythonのラムダ関数とは何かを理解していますが、「ラムダバインディング」の意味が何なのかわかりません。 Pythonドキュメントを検索します。 それについて読むためのリンクは素晴らしいでしょう。 ささいな説明の例はさらに良いでしょう。 ありがとう。
解決
まず、一般的な定義:
プログラムまたは関数ステートメント が実行され、現在の値 仮パラメータは保存されます( スタック)の範囲内 ステートメント、彼らはにバインドされています で行われた実際の引数の値 呼び出し。ステートメントが 終了、それらの元の値 仮引数が復元されます。この プロトコルは完全に再帰的です。内であれば ステートメントの本文、何かが 仮パラメータを引き起こす 再びバインドされ、新しい値に、 ラムダバインディングスキームは、 これはすべて整然と行われます マナー。
今、優れたここでの議論のpythonの例:
" ... x
のバインディングは1つだけです。 x = 7
を実行すると、既存のバインディングの値が変更されます。だから
def foo(x):
a = lambda: x
x = 7
b = lambda: x
return a,b
は両方とも7を返す2つの関数を返します。 x = 7
の後に新しいバインディングがあった場合、関数は異なる値を返します[もちろんfoo(7)を呼び出さないと仮定します。また、nested_scopesを想定しています] ...."
他のヒント
その用語は聞いたことがありませんが、説明の1つは「デフォルトパラメータ」です。ハックは、ラムダのパラメーターに値を直接割り当てるために使用されていました。 Swatiの例を使用:
def foo(x):
a = lambda x=x: x
x = 7
b = lambda: x
return a,b
aa, bb = foo(4)
aa() # Prints 4
bb() # Prints 7
使用されているフレーズはどこで見ましたか?
"バインディング" Pythonの一般的には、変数名が特定のオブジェクトを指すことになるプロセスを指します。割り当てやパラメーターの受け渡し、またはその他の手段、例えば:
a = dict(foo="bar", zip="zap", zig="zag") # binds a to a newly-created dict object
b = a # binds b to that same dictionary
def crunch(param):
print param
crunch(a) # binds the parameter "param" in the function crunch to that same dict again
したがって、「ラムダバインディング」と推測します。ラムダ関数を変数名にバインドするプロセス、またはその名前付きパラメーターを特定のオブジェクトにバインドするプロセスを指しますか?バインディングについては、 http://docs.python.orgの言語リファレンスにかなり適切な説明があります。 /ref/naming.html