Priorität der logischen Operatoren NOT, AND, OR in Python

Lesezeit: 5 Minuten

Prioritat der logischen Operatoren NOT AND OR in Python
Akshar Gupta

Soweit ich weiß, ist in C & C++ die Prioritätsfolge für NOT AND & OR NOT>AND>OR. Aber das scheint in Python nicht so zu funktionieren. Ich habe versucht, in der Python-Dokumentation danach zu suchen und bin gescheitert (ich bin wohl etwas ungeduldig.). Kann mir das jemand aufklären?

  • Können Sie ein Beispiel geben, bei dem die Operatorpriorität nicht so funktioniert, wie Sie denken?

    – Weiche der Dampfwalze aus

    21. Mai 2013 um 22:51 Uhr

  • nicht ist größer als und ist größer als oder

    – StrgAltF2

    6. Mai 2019 um 2:27 Uhr

1647960970 855 Prioritat der logischen Operatoren NOT AND OR in Python
Kyle Heuton

Es ist NICHT, UND, ODER, vom höchsten zum niedrigsten gemäß der Dokumentation auf
Vorrang des Operators

Hier ist die vollständige Vorrangtabelle, von der niedrigsten bis zur höchsten. Eine Zeile hat dieselbe Priorität und Ketten von links nach rechts

 0. :=
 1. lambda
 2. if – else
 3. or
 4. and
 5. not x
 6. in, not in, is, is not, <, <=, >, >=, !=, ==
 7. |
 8. ^
 9. &
 10. <<, >>
 11. +, -
 12. *, @, /, //, %
 13. +x, -x, ~x
 14. **
 14. await x
 15. x[index], x[index:index], x(arguments...), x.attribute
 16. (expressions...), [expressions...], {key: value...}, {expressions...}

  • Beachten Sie, dass ** hat einige Ausnahmen, die in einer Fußnote vermerkt sind, wenn es um Vorrang vor arithmetischen Operatoren geht.

    – Martijn Pieters

    21. Mai 2013 um 21:09 Uhr

  • Das verwirrt den Mathematiker in mir: In der Arithmetik würden wir sagen, es hat Vorrang vor arithmetischen Operatoren. Rechts davon die ** Der Operator hat keinen Vorrang vor arithmetischen Operationen, aber er hat auf der linken Seite … Zum Beispiel 5*2**2 == 5*(2**2). Es ist jedoch richtig, das zu sagen 2**-1 == 2**(-1).

    – PhilMacKay

    5. September 2018 um 13:51 Uhr


  • @PhilMacKay – es scheint, dass zB das Minus Teil des ist int wörtlich, aber beim Analysieren mit ast es ist nicht der Fall – es ist UnaryOp mit USub und 1 als Operand. Der wahre Grund ist, dass es keine andere Möglichkeit gibt, es zu analysieren. Dh 2** ist kein korrekter linker Operand für binäres Minus. Also “Potenzierungsprioritätsausnahme”, aber “nur rechts”.

    – Tomasz Gandor

    28. Oktober 2019 um 16:38 Uhr

Sie können den folgenden Test durchführen, um den Vorrang von herauszufinden and und or.

Erster Versuch 0 and 0 or 1 in der Python-Konsole

Wenn or bindet zuerst, dann würden wir erwarten 0 als Ausgabe.

In meiner Konsole 1 ist die Ausgabe. Es bedeutet and entweder bindet zuerst oder gleich or (eventuell werden Ausdrücke von links nach rechts ausgewertet).

Dann versuche es 1 or 0 and 0.

Wenn or und and gleich mit der eingebauten Links-nach-Rechts-Auswertungsreihenfolge binden, dann sollten wir hinkommen 0 als Ausgabe.

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

  • Genauer gesagt werden die Ausdrücke wie folgt ausgewertet: ((0 and 0) or 1) und (1 or (0 and 0))

    – Conchylikultor

    17. Dezember 2019 um 23:08 Uhr

  • Im zweiten Ausdruck jedoch, the (0 and 0) wird nie als bewertet (exp1 or exp2) direkt zurückgeben, wenn exp1 ist True. Ähnlich im ersten Ausdruck, dem and 0 Teil wird nie als bewertet exp1 and exp2 direkt zurückgeben, wenn exp1 ist False.

    – Conchylikultor

    17. Dezember 2019 um 23:25 Uhr

not bindet fester als and die bindet fester als or wie im angegeben Sprach-Referenz

1643847966 801 Prioritat der logischen Anweisungen NOT AND OR in Python
Oswald Wirt

Bei den booleschen Operatoren ist die Rangfolge vom schwächsten zum stärksten wie folgt:

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

Bei gleichrangigen Operatoren erfolgt die Auswertung von links nach rechts.

Prioritat der logischen Operatoren NOT AND OR in Python
Viktoria Stuart

Einige einfache Beispiele; beachten Sie den Vorrang der Operatoren (not, and, or); Klammern, um die menschliche Interpretierbarkeit zu unterstützen.

a="apple"
b = 'banana'
c="carrots"

if c == 'carrots' and a == 'apple' and b == 'BELGIUM':
    print('True')
else:
    print('False')
# False

Ähnlich:

if b == 'banana'
True

if c == 'CANADA' and a == 'apple'
False

if c == 'CANADA' or a == 'apple'
True

if c == 'carrots' and a == 'apple' or b == 'BELGIUM'
True

# Note this one, which might surprise you:
if c == 'CANADA' and a == 'apple' or b == 'banana'
True

# ... it is the same as:
if (c == 'CANADA' and a == 'apple') or b == 'banana':
True

if c == 'CANADA' and (a == 'apple' or b == 'banana'):
False

if c == 'CANADA' and a == 'apple' or b == 'BELGIUM'
False

if c == 'CANADA' or a == 'apple' and b == 'banana'
True

if c == 'CANADA' or (a == 'apple' and b == 'banana')
True

if (c == 'carrots' and a == 'apple') or b == 'BELGIUM'
True

if c == 'carrots' and (a == 'apple' or b == 'BELGIUM')
True

if a == 'apple' and b == 'banana' or c == 'CANADA'
True

if (a == 'apple' and b == 'banana') or c == 'CANADA'
True

if a == 'apple' and (b == 'banana' or c == 'CANADA')
True

if a == 'apple' and (b == 'banana' and c == 'CANADA')
False

if a == 'apple' or (b == 'banana' and c == 'CANADA')
True

Es gibt kein triftiger grund für Python zu haben andere Prioritätsreihenfolge dieser Operatoren als gut etabliert in (fast) allen anderen Programmiersprachen, einschließlich C/C++.

Vielleicht finden Sie es in Die Python-SprachreferenzTeil 6.16 – Operator Precedence, herunterladbar (für die aktuelle Version und verpackt mit allen anderen Standarddokumentationen) von https://docs.python.org/3/download.htmloder hier online lesen: 6.16. Vorrang des Operators.

Aber es gibt noch etwas in Python, das Sie in die Irre führen kann: Die Ergebnis von and und or Betreiber können sein unterschiedlich von True oder False – sehen 6.11 Boolesche Operationen im selben Dokument.

1647960972 130 Prioritat der logischen Operatoren NOT AND OR in Python
Aziz Nadirow

Ausdruck 1 or 1 and 0 or 0 kehrt zurück 1. Sieht so aus, als hätten wir die gleiche Priorität, fast die gleiche.

  • So wie es derzeit geschrieben steht, ist Ihre Antwort unklar. Bitte bearbeiten Sie, um zusätzliche Details hinzuzufügen, die anderen helfen zu verstehen, wie dies die gestellte Frage beantwortet. Weitere Informationen zum Verfassen guter Antworten finden Sie in der Hilfe.

    – Gemeinschaft
    bot

    21. November 2021 um 13:29 Uhr

1005490cookie-checkPriorität der logischen Operatoren NOT, AND, OR in Python

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy