11

Python のラムダ関数とは何かは理解していますが、Python のドキュメントを検索しても「ラムダ バインディング」の意味がわかりません。それについて読むためのリンクは素晴らしいでしょう。些細な説明の例はさらに良いでしょう。ありがとうございました。

4

3 に答える 3

14

まず、一般的な定義:

プログラムまたは関数ステートメントが実行されると、仮パラメーターの現在の値が (スタックに) 保存され、ステートメントのスコープ内で、呼び出しで作成された実際の引数の値にバインドされます。ステートメントが終了すると、これらの仮引数の元の値が復元されます。このプロトコルは完全に再帰的です。ステートメントの本体内で、仮パラメーターが新しい値に再度バインドされる原因となる何かが行われた場合、ラムダ バインド スキームにより、これがすべて規則正しい方法で行われることが保証されます。

さて、こちらの議論に優れたpythonの例があります

「... のバインディングは 1 つだけですx:x = 7既存のバインディングの値を変更するだけです。そのためです。

def foo(x): 
   a = lambda: x 
   x = 7 
   b = lambda: x 
   return a,b

どちらも 7 を返す 2 つの関数を返します。の後に新しいバインディングがあった場合x = 7、関数は異なる値を返します [もちろん、foo(7) を呼び出さないと仮定します。また、nested_scopes を想定して]...."

于 2008-10-02T04:38:59.680 に答える
8

私はその用語を聞いたことがありませんが、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
于 2008-10-02T04:52:54.717 に答える
1

このフレーズが使われているのをどこで見たことがありますか。

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の言語リファレンスにバインディングのかなり良い説明があります。

于 2008-10-02T04:30:36.800 に答える