Priority of the logical statements NOT AND & OR in python

折月煮酒 提交于 2019-11-26 05:57:55

问题


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

  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. **
  15. x[index], x[index:index], x(arguments...), x.attribute
  16. (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:

  1. or
  2. and
  3. not x
  4. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!