Boolesche Operationen

Ich bin verwirrt, wie Python boolesche Aussagen auswertet.

Für ex.

False and 2 or 3 

Kehrt 3 zurück

Wie wird das ausgewertet? Ich dachte, Python schaut zuerst auf "False und 2" und kehrt False zurück, ohne auch nur auf 'oder 3' zu schauen. Was ist die Ordnung von dem, was Python hier sieht?

Eine andere ist:

 1 or False and 2 or 2 and 0 or 0 

Gibt 1 zurück

Von dem, was ich aus dem ersten Beispiel gesammelt habe, dachte ich, dass Python von links nach rechts auswerten würde, also würde '1 oder False' 1 zurückkehren, dann würde '1 und 2' 2 zurückkehren, dann würde '2 oder 2' die ersten 2 zurückgeben , Dann '2 und 0' würde 0 zurückkehren, dann '0 oder 0' würde die zweite 0 zurückgeben.

Wie Sie sagen können, ich bin ziemlich verwirrt hier, bitte helfen!

Vielen Dank!

5 Solutions collect form web for “Boolesche Operationen”

and hat höhere Priorität als or .

 False and 2 or 3 

Wird ausgewertet

 ((False and 2) or 3) 

Da der erste Teil (False and 2) False , muss Python den zweiten Teil auswerten, um zu sehen, ob der ganze Zustand noch True oder nicht. Es kann, da 3 zu True ausgewertet wird, so dass dieser Operand zurückgegeben wird.

Ähnlich für 1 or False and 2 or 2 and 0 or 0 die als ausgewertet wird

 (1 or ((False and 2) or ((2 and 0) or 0))) 

Da 1 zu True ausgewertet wird, wird die ganze Bedingung True , egal welcher Wert die anderen Operanden haben. Python kann an dieser Stelle die Auswertung stoppen und gibt den Operanden zurück, der den Endwert bestimmt.

Das Stoppen so früh wie das endgültige Ergebnis bestimmt wird, wird als Kurzschlussauswertung bezeichnet und kann wie folgt beschrieben werden:

Immer wenn das endgültige Ergebnis des Ausdrucks bestimmt wird, wird die Auswertung gestoppt und in Python wird der Wert des Operanden, der den Endwert bestimmt, zurückgegeben. Das heißt, unter der Annahme einer Links-Rechts-Auswertung:

  • Für den and Operator, der linke Operand, der False (oder der letzte)
  • Für den or Operator, der linksste Operand, der True (oder der letzte)

Check out Abschnitt 5.15 dieser Seite: http://docs.python.org/reference/expressions.html

or hat eine niedrigere Präzision als and , so wird Ihre Aussage als ausgewertet

 (false and 2) or 3 

Das Problem hier ist, dass es einen Auftrag zur Bewertung gibt, and hat eine höhere Priorität als or . Als solche werden sie hier von links nach rechts ausgewertet.

Angesichts dieser, False and 2 or 3 ist, zu python, (False and 2) or 3 – so es bewertet zu False or True , dann zu True .

In deinem nächsten Beispiel, Python-Kurzschlüsse, so 1 or False wertet auf True als 1 und gibt daher 1 . Der Rest wird nie ausgewertet. Das macht Sinn, als ob der eine Teil eines or ist True , du weißt, das Ganze muss sein – also warum die Mühe, zusätzliche Arbeit zu machen?

Eine gute Möglichkeit, dies zu überprüfen ist, um Funktionen zu definieren, die drucken:

 >>> def test(x): ... print("Test: "+str(x)) ... return x ... >>> test(1) or test(0) or test(3) Test: 1 1 >>> test(0) or test(0) or test(3) Test: 0 Test: 0 Test: 3 3 >>> test(False) and test(2) or test(3) Test: False Test: 3 3 >>> test(1) or test(False) and test(2) or test(2) and test(0) or test(0) Test: 1 1 

Dies macht es leicht zu sehen, was ausgewertet wird, und in welcher Reihenfolge.

Ich lese das schon eine Weile auf der Python-Docs-Seite. Wenn ich es finde, werde ich die Referenz posten. Es sagte etwas in der Linie von, in einer booleschen Aussage, Python wird das erste True-Objekt zurückgeben. Also … das und war vor Falsch gefälscht, aber das oder hatte nur ein Argument, das war 3 (wahr).

Es wird so ausgewertet:

 result = (False and 2) or 3 

Also im Grunde, wenn False and 2 wahr ist-ish, dann wird es zurückgegeben, sonst wird 3 zurückgegeben.

  • So aktualisieren Sie aktuelle Verzeichnisse in der Liste von os.walk, während Sie es in Echtzeit umbenennen
  • Hinzufügen von Wertetiketten auf einem matplotlib Balkendiagramm
  • Einstellen des Fensters auf eine feste Größe mit Tkinter
  • Lesen und aggregieren von Daten aus CSV-Datei
  • Kann PyCharm alle Python-Fehler in einem Projekt auflisten?
  • / Usr / bin / python vs /opt/local/bin/python2.7 auf OS X
  • Laden von Textdatei mit Float und String mit numpy.loadtxt
  • Tastaturunterbrechung im Debug-Modus PyCharm
  • Warum gibt es nicht (wahr) in [falsch, wahr] "falsch?
  • Fange Fehler in einer für Schleife Python
  • Mehrere Kivy-Apps gleichzeitig ausführen, die miteinander kommunizieren
  • Python ist die beste Programmiersprache der Welt.