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
Susan SarandonOriginal
2024-12-21 04:16:14583Durchsuche

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.")

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

if (name == "Kevin") or ("Jon") or ("Inbar"):

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":
  • Stellen Sie einen ein Sammlung:
if name in {"Kevin", "Jon", "Inbar"}:
  • Verwenden Sie any() und einen Generatorausdruck:
if any(name == auth for auth in ["Kevin", "Jon", "Inbar"]):

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

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(...)])

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!

Stellungnahme:
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