Heim > Backend-Entwicklung > Python-Tutorial > Warum wird „name == „Kevin' oder „Jon' oder „Inbar' in Python immer als wahr ausgewertet?

Warum wird „name == „Kevin' oder „Jon' oder „Inbar' in Python immer als wahr ausgewertet?

Susan Sarandon
Freigeben: 2024-12-21 04:16:14
Original
459 Leute haben es durchsucht

Why Does `name ==

Warum wird die Zuweisung mit „Or“ immer als wahr ausgewertet?

Beim Vergleich mehrerer Werte mithilfe logischer Operatoren kann das Verhalten von Python von unserem intuitiven Verständnis abweichen . Zum Beispiel im Code:

name = input("Hello. Please enter your name: ")
if name == "Kevin" or "Jon" or "Inbar":
    print("Access granted.")
else:
    print("Access denied.")
Nach dem Login kopieren

Der Zugriff wird auch nicht autorisierten Benutzern gewährt, da Python diesen Ausdruck wie folgt auswertet:

if (name == "Kevin") or ("Jon") or ("Inbar"):
Nach dem Login kopieren

In diesem Fall ist das Ergebnis für jeden Namen „True“. da „Jon“ und „Inbar“ als unabhängige logische Operanden behandelt werden.

So vergleicht man einen Wert mit mehreren Andere

Um korrekt mit mehreren Werten zu vergleichen:

  • Verwenden Sie mehrere ==-Operatoren:
if name == "Kevin" or name == "Jon" or name == "Inbar":
Nach dem Login kopieren
  • Stellen Sie einen ein Sammlung:
if name in {"Kevin", "Jon", "Inbar"}:
Nach dem Login kopieren
  • Verwenden Sie any() und einen Generatorausdruck:
if any(name == auth for auth in ["Kevin", "Jon", "Inbar"]):
Nach dem Login kopieren

Leistungsvergleich

Aus Gründen der Lesbarkeit und Effizienz empfiehlt sich im Allgemeinen die Verwendung einer Sammlung bevorzugt:

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
Nach dem Login kopieren

Beweis des Parsing-Verhaltens

Das integrierte AST-Modul bestätigt, dass Ausdrücke wie a == b oder c oder d wie folgt analysiert werden:

BoolOp(
    op=Or(),
    values=[
        Compare(left=Name(...), ops=[Eq()], comparators=[Name(...)]),
        Name(...),
        Name(...),
        Name(...)])
Nach dem Login kopieren

zeigt an, dass „oder“ auf einzelne Vergleiche und Ausdrücke angewendet wird.

Das obige ist der detaillierte Inhalt vonWarum wird „name == „Kevin' oder „Jon' oder „Inbar' in Python immer als wahr ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage