Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `name == 'Kevin' atau 'Jon' atau 'Inbar'` Sentiasa Menilai kepada Benar dalam Python?

Mengapakah `name == 'Kevin' atau 'Jon' atau 'Inbar'` Sentiasa Menilai kepada Benar dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-12-21 04:16:14535semak imbas

Why Does `name ==

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:

  • Gunakan berbilang operator ==:
if name == "Kevin" or name == "Jon" or name == "Inbar":
  • Menggaji a koleksi:
if name in {"Kevin", "Jon", "Inbar"}:
  • Gunakan mana-mana() dan ungkapan penjana:
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!

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