Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Pemahaman Senarai Python Saya Mengubah Nilai Pembolehubah Saya?

Mengapa Pemahaman Senarai Python Saya Mengubah Nilai Pembolehubah Saya?

Susan Sarandon
Susan Sarandonasal
2024-11-29 12:08:11884semak imbas

Why Does My Python List Comprehension Change My Variable's Value?

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!

Kenyataan:
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