问题
As far as I know, in C & C++, the priority sequence for NOT AND & OR is NOT>AND>OR. But this doesn\'t seem to work in a similar way in Python. I tried searching for it in the Python documentation and failed (Guess I\'m a little impatient.). Can someone clear this up for me?
回答1:
It's NOT, AND, OR, from highest to lowest according to the documentation https://docs.python.org/3/reference/expressions.html#operator-precedence
Here is the complete precedence table, lowest precedence to highest. A row has the same precedence and chains from left to right
- lambda
- if – else
- or
- and
- not x
- in, not in, is, is not, <, <=, >, >=, !=, ==
- |
- ^
- &
- <<, >>
- +, -
- *, /, //, %
- +x, -x, ~x
- **
- x[index], x[index:index], x(arguments...), x.attribute
- (expressions...), [expressions...], {key: value...}, {expressions...}
EDIT: Had the wrong precedence
回答2:
You can do the following test to figure out the precedence of and
and or
.
First, try 0 and 0 or 1
in python console
If or
binds first, then we would expect 0
as output.
In my console, 1
is the output. It means and
either binds first or equal to or
(maybe expressions are evaluated from left to right).
Then try 1 or 0 and 0
.
If or
and and
bind equally with the built-in left to right evaluation order, then we should get 0
as output.
In my console, 1
is the output. Then we can conclude that and
has higher priority than or
.
回答3:
not
binds tighter than and
which binds tighter than or
as stated in the language reference
回答4:
Of the boolean operators the precedence, from weakest to strongest, is as follows:
or
and
not x
is not
;not in
Where operators are of equal precedence evaluation proceeds from left to right.
回答5:
There is no good reason for Python to have other priority sequence of those operators than well established one in (almost) all other programming languages, including C/C++.
You may find it in The Python Language Reference, part 6.16 - Operator precedence, downloadable (for the current version and packed with all other standard documentation) from https://docs.python.org/3/download.html, or read it online here: 6.16. Operator precedence.
But there is still something in Python which can mislead you: The result of and
and or
operators may be different from True
or False
- see 6.11 Boolean operations in the same document.
来源:https://stackoverflow.com/questions/16679272/priority-of-the-logical-statements-not-and-or-in-python