Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Fungsi Dicipta dalam Gelung Mengembalikan Nilai yang Sama, dan Bagaimana Saya Boleh Membetulkannya?
Apabila mencipta fungsi atau lambda dalam gelung, adalah penting untuk mempertimbangkan konsep pengikatan lewat. Dalam contoh yang diberikan:
functions = [] for i in range(3): def f(): return i functions.append(f)
setiap fungsi mencari nilai i selewat mungkin, iaitu selepas gelung selesai. Akibatnya, semua fungsi mengembalikan nilai akhir i, iaitu 2.
Untuk menyelesaikan isu ini dan mendapatkan tiga fungsi berbeza yang mengeluarkan 0, 1 dan 2, kita perlu memaksa pengikatan awal. Ini boleh dicapai dengan menggunakan parameter lalai:
functions = [] for i in range(3): def f(i=i): # Default parameter for i return i functions.append(f)
Dalam kes ini, parameter lalai i dinilai pada masa definisi, bukan pada masa panggilan, memastikan setiap fungsi menggunakan nilai i yang betul.
Sebagai alternatif, kita boleh menggunakan kilang fungsi untuk mencipta fungsi dengan pengikatan awal:
def make_f(i): def f(): return i return f functions = [] for i in range(3): functions.append(make_f(i))
Fungsi make_f mencipta fungsi baharu dengan nilai yang betul iaitu i bound early.
Atas ialah kandungan terperinci Mengapa Fungsi Dicipta dalam Gelung Mengembalikan Nilai yang Sama, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!