关于逻辑运算符优先级的问题
0 and 1 2 and 3 0 or 1 2 or 3 上面的返回值是什么?
我一开始以为返回的都是左边的值,但是结果和我想的不同,结果如下:
In [4]: 0 and 1 Out[4]: 0 In [5]: 2 and 3 Out[5]: 3 In [6]: 0 or 1 Out[6]: 1 In [7]: 2 or 3 Out[7]: 2
为什么 0 and 1 返回的是 0 , 而2 and 3却返回的是3?
为什么 0 or 1 返回的是 1 , 而 2 or 3却返回的是2?
经过我不断地额翻阅资料,我找到了答案。
首先要明白以下2点:
逻辑运算符的优先级:not > and > or
Python中所有的空字符串都是假,非空字符串都是真,非零的数字都是真
关于and:
只要左边的表达式为真,那么整个表达式返回的是右边表达式的值,否则返回的是左边表达式的值
换言之,x and y 的值只能是x 和 y,x为真时就是y,x为假就是x,示例如下:
In [1]: x=1 In [2]: y=2 In [3]: x and y Out[3]: 2 In [4]: x=0 In [5]: y=1 In [6]: x and y Out[6]: 0
关于or:
只要两边的表达式都为真,整个表达式的结果返回的是左边表达式的值;
如果一真一假,返回真值表达式的值;
如果两个值都假,比如空值和0,返回的是右边的值
换言之,x or y 的值只可能是 x 和 y,x为真就是x,x为假就是y,示例如下:
In [7]: x=1 In [8]: y=0 In [9]: x or y Out[9]: 1 In [10]: x='hello' In [11]: y='world' In [12]: x or y Out[12]: 'hello' In [13]: x='' In [14]: y=0 In [15]: x or y Out[15]: 0
关于not:
x为真,则输出False
x为假,则输出True
当not和and及or在一起运算时,优先级为是not>and>or,下面来看下3个逻辑运算符一起使用的结果:
In [18]: (5>3) and (2>4) or not 6<7 Out[18]: False In [19]: (5>3) and (2<4) or not 6<7 Out[19]: True In [20]: (5>3) and (2<4) or not 6>7 Out[20]: True