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:
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"]):
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!