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
Lepaskan: 2024-12-21 04:16:14
asal
540 orang telah melayarinya

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.")
Salin selepas log masuk

Akses diberikan walaupun kepada pengguna yang tidak dibenarkan kerana Python menilai ungkapan ini sebagai:

if (name == "Kevin") or ("Jon") or ("Inbar"):
Salin selepas log masuk

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":
Salin selepas log masuk
  • Menggaji a koleksi:
if name in {"Kevin", "Jon", "Inbar"}:
Salin selepas log masuk
  • Gunakan mana-mana() dan ungkapan penjana:
if any(name == auth for auth in ["Kevin", "Jon", "Inbar"]):
Salin selepas log masuk

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
Salin selepas log masuk

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(...)])
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan