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?
Priorität der logischen Operatoren NOT, AND, OR in Python
Akshar Gupta
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 Beispiel5*2**2 == 5*(2**2)
. Es ist jedoch richtig, das zu sagen2**-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 mitast
es ist nicht der Fall – es istUnaryOp
mitUSub
und1
als Operand. Der wahre Grund ist, dass es keine andere Möglichkeit gibt, es zu analysieren. Dh2**
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, wennexp1
istTrue
. Ähnlich im ersten Ausdruck, demand 0
Teil wird nie als bewertetexp1 and exp2
direkt zurückgeben, wennexp1
istFalse
.– Conchylikultor
17. Dezember 2019 um 23:25 Uhr
not
bindet fester als and
die bindet fester als or
wie im angegeben Sprach-Referenz
Oswald Wirt
Bei den booleschen Operatoren ist die Rangfolge vom schwächsten zum stärksten wie folgt:
or
and
not x
is not
;not in
Bei gleichrangigen Operatoren erfolgt die Auswertung von links nach rechts.
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.
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
bot21. November 2021 um 13:29 Uhr
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