Senarai Python: Kesalahan Pembuangan Item Semasa Lelaran
Lelaran melalui senarai Python sambil mengalih keluar item secara serentak boleh membawa kepada tingkah laku yang tidak dijangka. Contoh yang ketara ialah yang berikut:
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i)</code>
Membingungkan, cetakan akhir huruf mendedahkan bahawa hanya setiap item lain telah dialih keluar.
Sebab Anomali
Tingkah laku ini berpunca daripada cara Python mengendalikan pengubahsuaian kepada boleh diulang semasa lelaran. Dokumentasi secara eksplisit menyatakan bahawa mengubah suai urutan yang diulang secara amnya adalah tidak selamat, terutamanya untuk jenis boleh ubah seperti senarai.
Amalan ini boleh membawa kepada tingkah laku yang tidak ditentukan dan potensi perubahan dalam binaan Python akan datang.
Pendekatan Betul untuk Mengalih Keluar Semua Item
Untuk mengalih keluar semua item dengan selamat daripada senarai, gunakan mana-mana kaedah berikut:
Mengendalikan Pembuangan Item Bersyarat
Untuk mengalih keluar item bersyarat, buat salinan senarai menggunakan sintaks hirisan [:]:
<code class="python">commands = ["ls", "cd", "rm -rf /"] for cmd in commands[:]: if "rm " in cmd: commands.remove(cmd)</code>
Sebagai alternatif, gunakan fungsi penapis untuk mengecualikan item yang tidak diingini:
<code class="python">commands = [cmd for cmd in commands if not is_malicious(cmd)]</code>
Atas ialah kandungan terperinci Apabila Mengulangi Melalui Senarai Python, Mengapa Anda Perlu Mengelakkan Mengalih Keluar Item?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!