为什么在python中,10和5返回5,5和10返回10?基本上,它返回和运算符之后的第二个int,而与值无关



我在研究python"and"运算符,发现:

>>> 10 and 5
5
>>> 5 and 10
10

想想语句逻辑以及哪个操作数决定整个表达式的值:

and

  • 第一个错误操作数生成表达式False,而不管后面是什么
  • 如果只有truthy操作数,则最后一个操作数解决

示例:

>>> 5 and 0
0
>>> 0 and 5
0 
>>> 5 and 0 and 3
0 
>>> 10 and 5
5
>>> 5 and 10
10

or

  • 第一个真操作数生成表达式True,而不管后面是什么
  • 如果只有错误的操作数,则最后一个操作数解决

示例:

>>> 5 or 0
5
>>> 0 or 5
5 
>>> 5 or 0 or 3
5 
>>> 10 or 5
10
>>> 5 or 10
5

Shot Circuit行为:

请注意,表达式的其余部分甚至没有求值,如果您将例如函数调用或其他具有副作用的表达式进行连锁,则这是相关的:

>>> 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)))

最新更新