Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Pemahaman Senarai Python 2 Mengikat Semula Nama Di Luar Skopnya?

Mengapa Pemahaman Senarai Python 2 Mengikat Semula Nama Di Luar Skopnya?

Patricia Arquette
Lepaskan: 2024-11-29 12:41:10
asal
381 orang telah melayarinya

Why Does Python 2's List Comprehension Rebind Names Outside Its Scope?

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!
Salin selepas log masuk

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!

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