Gelagat Pemahaman Senarai yang Tidak Dijangka: Nama Pantulan dan Skop Kabur
Pemahaman senarai Python menawarkan cara yang ringkas dan mudah untuk membuat senarai, tetapi mereka datang dengan perangkap tersembunyi: mengikat semula nama walaupun di luar skop kefahaman itu sendiri. Dalam Python 2, tingkah laku pelik ini telah menjadi punca kekecewaan dan ralat pengaturcaraan.
Pertimbangkan kod berikut:
x = "original value" squares = [x**2 for x in range(5)] print(x) # Prints 4 in Python 2!
Dalam Python 2, melaksanakan kod ini secara tidak dijangka akan mencetak 4 berbanding "nilai asal." Ini kerana pemahaman senarai membocorkan pembolehubah kawalan gelung x ke dalam skop sekeliling, mengatasi nilai asalnya.
Tingkah laku ini berpunca daripada cara pemahaman senarai dilaksanakan dalam Python 2: sebagai pengoptimuman untuk meningkatkan kecekapannya. Walau bagaimanapun, ia telah menjadi titik kesakitan yang ketara bagi pengaturcara Python, yang membawa kepada ralat dan kekeliruan.
Syukurlah, dalam Python 3, "rahsia kecil yang kotor" ini telah dihapuskan. Senarai pemahaman kini menggunakan strategi pelaksanaan yang sama seperti ungkapan penjana, yang menggunakan bingkai pelaksanaan yang berasingan. Akibatnya, dalam Python 3, coretan kod di atas mencetak "nilai asal" dengan betul seperti yang diharapkan, kerana x dalam pemahaman tidak membayangi x dalam skop sekeliling.
Guido van Rossum, pencipta Python, menjelaskan alasan di sebalik perubahan ini:
"[Kami membuat perubahan ini untuk] membetulkan 'rahsia kecil yang kotor' senarai pemahaman dengan menggunakan strategi pelaksanaan yang sama seperti ungkapan penjana."
Tingkah laku yang dipertingkatkan dalam Python 3 ini adalah bukti pembangunan dan penghalusan bahasa Python yang berterusan, memastikan kejelasan dan kebolehramalan yang lebih baik dalam penggunaan pemahaman senarai.
Atas ialah kandungan terperinci Mengapa Pemahaman Senarai Python 2 Mengikat Semula Nama Di Luar Skopnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!