ホームページ  >  記事  >  バックエンド開発  >  Python Lambda 関数はローカル変数参照をどのように処理し、いつ評価されるのでしょうか?

Python Lambda 関数はローカル変数参照をどのように処理し、いつ評価されるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 04:06:02428ブラウズ

How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?

ローカル値を使用した Python ラムダ バインディングを理解する

Python でラムダ関数を操作する場合、ローカル変数とどのように対話するかを理解することが重要です。特に複数のラムダが同じ変数を参照する場合はそうです。

次の例を考えてみましょう:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda: pv(v))  # Lambda binds to the reference of 'v'

for xx in x:
    xx()  # Prints 1 twice</code>

最初は、リスト 'x' 内のラムダ関数が現在の 'v' を参照すると予想されるかもしれません。作成当時。ただし、これは Python の仕組みではありません。代わりに、Python は関数呼び出し時に変数名を評価し、両方のラムダが「v」の最終値 (1) を参照するようにします。

目的の動作を実現するには (0 を出力し、次に 1 を出力します) )、Python のデフォルト引数メカニズムを利用できます:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda v=v: pv(v))  # Lambda binds to the copy of 'v' at creation time

for xx in x:
    xx()  # Prints 0 and then 1</code>

「v」のデフォルト引数を設定すると、ラムダ関数は作成時に作成された「v」のローカル コピーにバインドされます。後で使用するときに正しい参照が保持されるようにします。

Python は変数名を作成時ではなく関数呼び出し時に検索することに注意してください。この原則は、次の例で示すように、ラムダだけでなく通常の関数にも当てはまります:

<code class="python">x = "before foo defined"

def foo():
    print(x)  # Prints "after foo was defined"

x = "after foo was defined"
foo()</code>

以上がPython Lambda 関数はローカル変数参照をどのように処理し、いつ評価されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。