Mengapa Berbilang Atau Operator Menghasilkan Hasil Yang Tidak Dijangka
Dalam Python, menilai ungkapan yang melibatkan berbilang atau pengendali boleh mengelirukan. Sebagai contoh, pertimbangkan baris kod berikut:
if name == "Kevin" or "Jon" or "Inbar":
Barisan ini berhasrat untuk memberikan akses kepada pengguna yang tidak dibenarkan, tetapi pada hakikatnya, ia membenarkan semua pengguna. Untuk memahami sebabnya, kita perlu meneliti tingkah laku pengendali.
Masalah dengan Pelbagai Ors
Dalam bahasa Inggeris, "or" menghubungkan berbilang klausa, menunjukkan bahawa sekurang-kurangnya satu mesti betul. Walau bagaimanapun, dalam Python, ungkapan seperti "A atau B atau C" dihuraikan sebagai "(A atau B) atau C." Ini bermakna hanya ungkapan pertama dinilai. Jika ia benar, keseluruhan ungkapan adalah benar.
Penyelesaian 1: Berbilang Operator Kesamaan
Untuk membandingkan "nama" dengan betul kepada setiap pengguna yang dibenarkan, gunakan berbilang operator kesamaan :
if name == "Kevin" or name == "Jon" or name == "Inbar":
Penyelesaian 2: Set Keahlian
Penyelesaian alternatif ialah menggunakan set nama yang dibenarkan dan semak keahlian:
authorized = {"Kevin", "Jon", "Inbar"} if name in authorized:
Penyelesaian 3: Mana-mana Operator
Fungsi any() juga boleh digunakan untuk mengulangi nama yang dibenarkan dan mengembalikan True jika mana-mana daripadanya sepadan "name":
authorized = ["Kevin", "Jon", "Inbar"] if any(name == auth for auth in authorized):
Prestasi
Antara tiga penyelesaian, keahlian set menawarkan prestasi terbaik, diikuti oleh berbilang pengendali kesaksamaan. Menggunakan any() adalah yang paling tidak cekap.
Atas ialah kandungan terperinci Mengapa Berbilang Operator `atau` dalam Python Menghasilkan Keputusan Boolean Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!