Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Fungsi Dicipta dalam Gelung Kadang-kadang Mengembalikan Nilai yang Salah?

Mengapa Fungsi Dicipta dalam Gelung Kadang-kadang Mengembalikan Nilai yang Salah?

Linda Hamilton
Lepaskan: 2024-12-27 18:11:15
asal
410 orang telah melayarinya

Why Do Functions Created in Loops Sometimes Return the Wrong Values?

Mengendalikan Penciptaan Fungsi dalam Gelung: Menyelesaikan Masalah Pengikatan Lewat

Apabila cuba mencipta fungsi dalam gelung, isu biasa timbul. Dalam contoh yang diberikan, matlamatnya adalah untuk menghasilkan tiga fungsi yang masing-masing mengembalikan 0, 1, dan 2. Walau bagaimanapun, ketiga-tiga fungsi akhirnya mengembalikan nilai yang sama (2). Ini berlaku disebabkan oleh ikatan lewat, di mana fungsi menangguhkan penilaian pembolehubah 'i' sehingga saat terakhir yang mungkin.

Memahami Pengikatan Lewat

Dalam kod tanpa pembetulan:

for i in range(3):
    def f():
        return i
Salin selepas log masuk

Setiap 'f' mencari 'i' lewat pelaksanaan gelung, pada masa 'i' telah mencapai nilai akhir 2. Akibatnya, ketiga-tiga fungsi mengembalikan 2, walaupun gelung berhasrat untuk mencipta fungsi mengembalikan 0, 1 dan 2.

Menyelesaikan Isu

Penyelesaian kepada masalah ini adalah dengan menguatkuasakan awal mengikat. Ini boleh dicapai dengan menghantar 'i' sebagai hujah kepada fungsi 'f' seperti ini:

for i in range(3):
    def f(i=i):
        return i
Salin selepas log masuk

Dalam kod yang dikemas kini ini, 'i' dicari pada masa definisi, apabila gelung dilaksanakan dan bukannya pada masa panggilan apabila 'f' dilaksanakan.

Penggunaan Penyelesaian Alternatif Penutupan

Pendekatan lain ialah menggunakan penutupan untuk mencipta "kilang fungsi":

def make_f(i):
    def f():
        return i
    return f
Salin selepas log masuk

Dalam gelung, 'f' kemudiannya boleh dibuat menggunakan 'f = make_f (i)'. Pendekatan ini juga memastikan pengikatan awal, kerana fungsi 'make_f' menghantar nilai 'i' kepada 'f' pada masa definisi.

Atas ialah kandungan terperinci Mengapa Fungsi Dicipta dalam Gelung Kadang-kadang Mengembalikan Nilai yang Salah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan