Warum mehrere Or-Operatoren zu unerwarteten Ergebnissen führen
In Python kann die Auswertung eines Ausdrucks mit mehreren Oder-Operatoren irreführend sein. Betrachten Sie beispielsweise die folgende Codezeile:
if name == "Kevin" or "Jon" or "Inbar":
Diese Zeile beabsichtigt, nicht autorisierten Benutzern Zugriff zu gewähren, erlaubt aber in Wirklichkeit allen Benutzern. Um zu verstehen, warum, müssen wir das Verhalten des Operators untersuchen.
Das Problem mit mehreren Ors
Im Englischen verbindet „or“ mehrere Klauseln und gibt an, dass mindestens eine muss wahr sein. In Python wird ein Ausdruck wie „A oder B oder C“ jedoch als „(A oder B) oder C“ geparst. Das bedeutet, dass nur der erste Ausdruck ausgewertet wird. Wenn es wahr ist, ist der gesamte Ausdruck wahr.
Lösung 1: Mehrere Gleichheitsoperatoren
Um „Name“ korrekt mit jedem autorisierten Benutzer zu vergleichen, verwenden Sie mehrere Gleichheitsoperatoren :
if name == "Kevin" or name == "Jon" or name == "Inbar":
Lösung 2: Mitgliedschaft festlegen
An Eine alternative Lösung besteht darin, einen Satz autorisierter Namen zu verwenden und auf Mitgliedschaft zu prüfen:
authorized = {"Kevin", "Jon", "Inbar"} if name in authorized:
Lösung 3: Beliebiger Operator
Die Funktion „any()“ kann ebenfalls verwendet werden um autorisierte Namen zu durchlaufen und „True“ zurückzugeben, wenn einer von ihnen übereinstimmt "name":
authorized = ["Kevin", "Jon", "Inbar"] if any(name == auth for auth in authorized):
Leistung
Unter den drei Lösungen bietet die Set-Mitgliedschaft die beste Leistung, gefolgt von mehreren Gleichheitsoperatoren. Die Verwendung von any() ist am wenigsten effizient.
Das obige ist der detaillierte Inhalt vonWarum führen mehrere „Oder'-Operatoren in Python zu unerwarteten booleschen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!