为什么 10 和 5 returns 5 和 5 和 10 returns 10 在 python?基本上它 returns 和运算符之后的第二个 int 与值无关
Why 10 and 5 returns 5 and 5 and 10 returns 10 in python? Basically it returns the second int after and operator irrespective of value
我正在调查 python "and" 运算符并发现:
>>> 10 and 5
5
>>> 5 and 10
10
想想语句逻辑,哪个操作数决定了整个表达式的值:
and
:
- 第一个伪造的操作数使表达式
False
无论后面是什么
- 如果只有真操作数,则最后一个解决
示例:
>>> 5 and 0
0
>>> 0 and 5
0
>>> 5 and 0 and 3
0
>>> 10 and 5
5
>>> 5 and 10
10
or
:
- 第一个真值操作数使表达式
True
无论后面是什么
- 如果只有falsy操作数,则最后一个解决
示例:
>>> 5 or 0
5
>>> 0 or 5
5
>>> 5 or 0 or 3
5
>>> 10 or 5
10
>>> 5 or 10
5
射击电路行为:
请注意,表达式的其余部分甚至不会被计算,如果您链接 e.g.function 调用或其他具有副作用的表达式,则相关:
>>> 4/0 or 5
ZeroDivisionError
>>> 5 or 4/0
5
>>> func1() or func2() and func3()
# func2 and func3 might never be called
左右结合
这是短路行为的直接要求,但并不完全直观,尤其是与 Python 的算术运算符相比:
a or b and c or d == (a or (b and (c or d)))
我正在调查 python "and" 运算符并发现:
>>> 10 and 5
5
>>> 5 and 10
10
想想语句逻辑,哪个操作数决定了整个表达式的值:
and
:
- 第一个伪造的操作数使表达式
False
无论后面是什么 - 如果只有真操作数,则最后一个解决
示例:
>>> 5 and 0
0
>>> 0 and 5
0
>>> 5 and 0 and 3
0
>>> 10 and 5
5
>>> 5 and 10
10
or
:
- 第一个真值操作数使表达式
True
无论后面是什么 - 如果只有falsy操作数,则最后一个解决
示例:
>>> 5 or 0
5
>>> 0 or 5
5
>>> 5 or 0 or 3
5
>>> 10 or 5
10
>>> 5 or 10
5
射击电路行为:
请注意,表达式的其余部分甚至不会被计算,如果您链接 e.g.function 调用或其他具有副作用的表达式,则相关:
>>> 4/0 or 5
ZeroDivisionError
>>> 5 or 4/0
5
>>> func1() or func2() and func3()
# func2 and func3 might never be called
左右结合
这是短路行为的直接要求,但并不完全直观,尤其是与 Python 的算术运算符相比:
a or b and c or d == (a or (b and (c or d)))