it-swarm.com.de

Priorität der logischen Anweisungen NOT AND & OR in python

Soweit ich weiß, ist in C & C++ die Prioritätssequenz für NOT AND & OR NOT> AND> OR. Dies scheint jedoch in Python nicht auf ähnliche Weise zu funktionieren. Ich habe versucht, es in der Python Dokumentation zu suchen, aber ich glaube, ich bin ein wenig ungeduldig.) Kann jemand das für mich klären?

61
Akshar Gupta

Es ist NICHT UND ODER vom höchsten zum niedrigsten gemäß der Dokumentation https://docs.python.org/3/reference/expressions.html#operator-precedence

Hier ist die vollständige Rangfolge-Tabelle, die niedrigste Rangfolge bis zur höchsten. Eine Zeile hat die gleiche Priorität und Ketten von links nach rechts

  1. lambda
  2. ansonsten
  3. oder
  4. und
  5. nicht x
  6. in, nicht in, ist, ist nicht, <, <=,>,> =,! =, ==
  7. |
  8. ^
  9. &
  10. <<, >>
  11. +, -
  12. *, /, //,%
  13. + x, -x, ~ x
  14. **
  15. x [Index], x [Index: Index], x (Argumente ...), x.attribute
  16. (Ausdrücke ...), [Ausdrücke ...], {Schlüssel: Wert ...}, {Ausdrücke ...}

EDIT: Hatte den falschen Vorrang

69
Kyle Heuton

Mit dem folgenden Test können Sie die Priorität von and und or ermitteln.

Erster Versuch 0 and 0 or 1 in python console

Wenn or zuerst bindet, erwarten wir 0 als Ausgabe.

In meiner Konsole 1 ist die Ausgabe. Dies bedeutet, dass and entweder zuerst oder gleich or gebunden wird (möglicherweise werden Ausdrücke von links nach rechts ausgewertet).

Dann versuche es 1 or 0 and 0.

Wenn or und and in gleicher Weise mit der integrierten Reihenfolge von links nach rechts verknüpft sind, sollten wir 0 als Ausgabe.

In meiner Konsole 1 ist die Ausgabe. Dann können wir schließen, dass and eine höhere Priorität hat als or.

18
nos

not bindet enger als and, was enger als or bindet, wie in Sprachreferenz angegeben

17
mgilson

Unter den Booleschen Operatoren ist die Rangfolge von der schwächsten zur stärksten wie folgt:

  1. or
  2. and
  3. not x
  4. is not; not in

Bei gleichrangigen Operatoren erfolgt die Bewertung von links nach rechts.

4
Oswald Wirt

Es gibt keinen guten Grund für Python) andere zu haben Prioritätsreihenfolge dieser Operatoren als gut etablierte in (fast) allen anderen Programmiersprachen, einschließlich C/C++.

Sie finden es möglicherweise in der Python Sprachreferenz , Teil 6.16 - Operator-Priorität, herunterladbar (für die aktuelle Version und gepackt mit allen anderen Standarddokumentationen) von https://docs.python.org/3/download.html , oder lesen Sie es online hier: 6.16. Operator Priorität .

Aber es gibt immer noch etwas in Python), das Sie irreführen kann: Das Ergebnis von and und or -Operatoren können sich von True- oder False -Operatoren unterscheiden - siehe 6.11 Boolesche Operationen) im selben Dokument.

2
MarianD