Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Pemahaman Senarai Python Saya Mengubah Nilai Pembolehubah Saya?
Gelagat Tidak Dijangka: Senarai Pemahaman Mengubah Skop Pembolehubah
Pemahaman senarai Python ialah alat yang berkuasa untuk manipulasi data, tetapi ia datang dengan ciri tersembunyi yang boleh membawa kepada tingkah laku yang tidak dijangka.
The Isu
Dalam Python 2 (dan lebih awal), pemahaman senarai boleh "mengikat semula" pembolehubah kawalan gelung kepada nilai terakhir gelung, walaupun selepas skop pemahaman telah tamat. Ini boleh mengakibatkan tingkah laku yang mengejutkan:
x = "original value" squares = [x**2 for x in range(5)] print(x) # Prints 4 in Python 2!
Dalam contoh ini, pembolehubah kawalan gelung x ditetapkan semula kepada nilai terakhir gelung (4) dalam pemahaman senarai. Ini bermakna apabila print(x) dipanggil di luar pemahaman, ia mencetak 4 dan bukannya "nilai asal."
Penjelasan
Tingkah laku yang diterangkan di atas ialah hasil daripada cara pemahaman senarai pada mulanya dilaksanakan dalam Python 2. Untuk menjadikan pemahaman senarai seefisien mungkin, pembolehubah kawalan gelung telah dibocorkan ke dalam persekitaran skop.
Pembetulan Python 3
Dalam Python 3, tingkah laku ini telah diubah. Senaraikan pemahaman tidak lagi mengikat semula pembolehubah kawalan gelung di luar pemahaman. Ini dilakukan untuk meningkatkan ketekalan antara pemahaman senarai dan ungkapan penjana, yang tidak pernah mengikat semula pembolehubah kawalan gelung.
Penjelasan Guido van Rossum
Guido van Rossum, pencipta Python, menjelaskan alasan di sebalik perubahan ini dalam Python 3:
"Kami memutuskan untuk membetulkan "rahsia kecil kotor" pemahaman senarai dengan menggunakan strategi pelaksanaan yang sama seperti untuk ungkapan penjana Oleh itu, dalam Python 3, contoh di atas... akan mencetak 'sebelum', membuktikan bahawa 'x' dalam pemahaman senarai membayangi sementara tetapi. tidak mengatasi 'x' dalam skop sekeliling."
Kesimpulan
Manakala kelakuan senarai pemahaman mungkin kelihatan berlawanan dengan intuisi pada mulanya, adalah penting untuk memahami cara ia berfungsi dalam Python 2 dan Python 3. Pengetahuan ini akan membantu anda mengelakkan kemungkinan pepijat dan menulis kod yang lebih mantap.
Atas ialah kandungan terperinci Mengapa Pemahaman Senarai Python Saya Mengubah Nilai Pembolehubah Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!