1

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

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

1 回答 1

2

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

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无论后面是什么,第一个真实的操作数都会使表达式
  • 如果只有假操作数,最后一个解决它

例子:

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

射击电路行为:

请注意,表达式的其余部分甚至没有被评估,如果您将 egfunction 调用或其他具有副作用的表达式链接起来,这是相关的:

>>> 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)))
于 2020-03-28T15:21:10.830 回答