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.

  • List unhashable, aber Tupel hashable?
  • Senden einer Datei über TCP-Sockets in Python
  • BeautifulSoup Geben Sie die Tabellenspalte nach Nummer an?
  • [Python] Schreiben einer Datendatei mit den Ziffern 1-10
  • Telegramm bot auf User-Antwort warten
  • Wie man eine Funktion auf einem laufenden Python-Thread aufruft
  • Signalbehandlung in Windows
  • PyvelN richtige Weg, um PEM-Dateien zu erstellen
  • Lesen Sie Outlook Events über Python
  • E-Mail-Anhang erhalten als "noname"
  • Web-App startet viele Male - web.py
  • Python ist die beste Programmiersprache der Welt.