Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `name == 'Kevin' atau 'Jon' atau 'Inbar'` Sentiasa Menilai kepada Benar dalam Python?
Mengapa Tugasan Menggunakan Atau Sentiasa Dinilai kepada Benar?
Apabila membandingkan berbilang nilai menggunakan operator logik, tingkah laku Python mungkin berbeza daripada pemahaman intuitif kami . Sebagai contoh, dalam kod:
name = input("Hello. Please enter your name: ") if name == "Kevin" or "Jon" or "Inbar": print("Access granted.") else: print("Access denied.")
Akses diberikan walaupun kepada pengguna yang tidak dibenarkan kerana Python menilai ungkapan ini sebagai:
if (name == "Kevin") or ("Jon") or ("Inbar"):
Dalam kes ini, hasilnya adalah Benar untuk sebarang nama memandangkan "Jon" dan "Inbar" dianggap sebagai operan logik bebas.
Cara Membandingkan Nilai kepada Berbilang Lain
Untuk membandingkan dengan betul terhadap berbilang nilai:
if name == "Kevin" or name == "Jon" or name == "Inbar":
if name in {"Kevin", "Jon", "Inbar"}:
if any(name == auth for auth in ["Kevin", "Jon", "Inbar"]):
Perbandingan Prestasi
Untuk kebolehbacaan dan kecekapan, menggunakan koleksi biasanya diutamakan:
import timeit timeit.timeit('name in {"Kevin", "Jon", "Inbar"}', setup="name='Inbar'") # Faster timeit.timeit('any(name == auth for auth in ["Kevin", "Jon", "Inbar"])', setup="name='Inbar'") # Slower
Bukti Penghuraian Gelagat
Modul ast terbina dalam mengesahkan bahawa ungkapan seperti a == b atau c atau d dihuraikan sebagai:
BoolOp( op=Or(), values=[ Compare(left=Name(...), ops=[Eq()], comparators=[Name(...)]), Name(...), Name(...), Name(...)])
menunjukkan bahawa "atau" digunakan pada perbandingan dan ungkapan individu.
Atas ialah kandungan terperinci Mengapakah `name == 'Kevin' atau 'Jon' atau 'Inbar'` Sentiasa Menilai kepada Benar dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!