2017-09-13 2 views
-4

Wenn "if" mit "oder" kombiniert wird, die ein erster Python priorisieren: zum Beispiel:Warum generiert dieser bedingte Ausdruck keinen SyntaxError?

if a == b or c 

ist es (a == b) or c oder ist es a == (b or c). Ich nehme die richtige logische Form eines erstere sein sollte, aber ich versehentlich verwendet:

if gender == "m' or "M" 

und zu meiner Überraschung, es keine Fehler generiert haben und den Zweck tat.

+1

Frage zeigt keine Forschungsanstrengungen. Eine einfache SO- oder Google-Suche würde die Antwort offenbaren. Bitte lesen und befolgen Sie die Buchungsrichtlinien: Welche Arten von Fragen kann ich https://stackoverflow.com/help/on-topic und How to ask stellen: https://stackoverflow.com/help/how-to-ask. Denken Sie auch daran, minimale, vollständige und überprüfbare Beispiele mit aufzunehmen: https://stackoverflow.com/help/mcve. Klicken Sie dann auf "Bearbeiten", um Ihre Frage zu bearbeiten, damit wir Ihnen helfen können. – SherylHohman

Antwort

0

Vom documentation:

Die folgende Tabelle fasst die Rangfolge der Operatoren in Python, von niedrigsten Priorität (least-Bindung) zu höchster Priorität (die meisten Bindung).

lambda 
if – else 
or  
and 
not x 
in, not in, is, is not, <, <=, >, >=, !=, == 
... 

Also, Ihre Frage zu beantworten,

a == b or c 

entspricht

(a == b) or (c) 

Der Code if gender == "m" or "M" wird wie folgt funktionieren: Ist gender == 'm"? Wenn ja, ist das Ergebnis True. Andernfalls testen Sie die "Wahrheit" von "M". Ist "M" "wahr"? Wenn dies der Fall ist, ist das Ergebnis wahr. Um zu verstehen, wie das funktioniert, sollten Sie wissen, dass alle Objekte eine Wahrhaftigkeit haben. Alle Ganzzahlen ungleich 0, nicht leere Zeichenfolgen und Datenstrukturen sind True. 0, 0.0, '', None, False, [], {} und set() sind alle False.

Für weitere Informationen, besuchen Sie How do I test one variable against multiple values?

+0

Danke, es scheint mir logisch zu sein und ich habe es immer benutzt. Könntest du mir bitte erklären, wie ich in meinem Code gearbeitet habe: – Mercury

+0

@COLDSPEED: Nochmals vielen Dank. Ich schätze eine so klare Erklärung. – Mercury

Verwandte Themen