Mentafsir Penutupan Leksikal dalam Python vs Perl
Semasa meneroka penutupan leksikal dalam Javascript, persoalan timbul tentang tingkah laku pelik mereka dalam Python. Pertimbangkan kod Python berikut:
1 2 3 4 5 6 7 8 |
|
Anehnya, ia mengeluarkan "4 4 4" dan bukannya "0 2 4" yang dijangkakan.
Sebaliknya, kod Perl yang setara ini menghasilkan yang diingini hasil:
1 2 3 4 5 6 7 8 9 10 11 |
|
Pendasar Perbezaan
Perbezaan utama terletak pada cara penutupan menangkap persekitarannya.
Penyelesaian Python
Untuk mencapai yang diharapkan tingkah laku dalam Python, anda perlu memaksa persekitaran yang berasingan untuk setiap fungsi. Satu penyelesaian ialah mencipta pencipta fungsi yang mengembalikan fungsi dengan penutupan berbeza:
1 2 3 4 5 6 7 8 9 10 |
|
Kaedah ini memastikan setiap fungsi mempunyai penutupan tersendiri, dengan nilai uniknya sendiri iaitu i.
Atas ialah kandungan terperinci Mengapakah Gelagat Penutupan Leksikal Python Berbeza daripada Perl?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!