ホームページ > バックエンド開発 > Python チュートリアル > ループ内で作成された関数が同じ値を返すのはなぜですか?それを修正するにはどうすればよいですか?

ループ内で作成された関数が同じ値を返すのはなぜですか?それを修正するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-04 13:05:47
オリジナル
537 人が閲覧しました

Why Do Functions Created in a Loop Return the Same Value, and How Can I Fix It?

ループ (または理解) 内での関数 (またはラムダ) の作成: 遅延バインディングを理解する

ループ内で関数またはラムダを作成するときは、概念を考慮することが重要です後期バインディングの。指定された例では:

functions = []

for i in range(3):
    def f():
        return i
    functions.append(f)
ログイン後にコピー

各関数は、ループが終了した後、できるだけ遅く i の値を検索します。その結果、すべての関数は i の最終値 2 を返します。

この問題を修正して、0、1、2 を出力する 3 つの異なる関数を取得するには、早期バインディングを強制する必要があります。これは、デフォルト パラメータを使用することで実現できます:

functions = []

for i in range(3):
    def f(i=i):  # Default parameter for i
        return i
    functions.append(f)
ログイン後にコピー

この場合、デフォルト パラメータ i は呼び出し時ではなく定義時に評価され、各関数が i の正しい値を使用することが保証されます。

あるいは、関数ファクトリを使用して、早期バインディングで関数を作成することもできます。

def make_f(i):
    def f():
        return i
    return f

functions = []

for i in range(3):
    functions.append(make_f(i))
ログイン後にコピー

make_f 関数は、正しい関数を使用して新しい関数を作成します。 i の値は早期にバインドされます。

以上がループ内で作成された関数が同じ値を返すのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート