Heim > Backend-Entwicklung > Python-Tutorial > Warum führen mehrere „Oder'-Operatoren in Python zu unerwarteten booleschen Ergebnissen?

Warum führen mehrere „Oder'-Operatoren in Python zu unerwarteten booleschen Ergebnissen?

Linda Hamilton
Freigeben: 2024-12-31 03:44:09
Original
992 Leute haben es durchsucht

Why Do Multiple `or` Operators in Python Produce Unexpected Boolean Results?

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

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

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

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

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!

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