布尔运算

kkS*_*der 7 python python-2.7

我对Python如何评估布尔语句感到困惑.

对于前者

False and 2 or 3
Run Code Online (Sandbox Code Playgroud)

返回3

这是如何评估的?我认为Python首先看'False和2',并且在没有看'或3'的情况下返回False.Python在这里看到的顺序是什么?

另一个是:

1 or False and 2 or 2 and 0 or 0
Run Code Online (Sandbox Code Playgroud)

返回1

从我从第一个例子中收集到的,我认为Python将从左到右进行评估,因此'1或False'将返回1,然后'1和2'将返回2,然后'2或2'将返回前2 ,然后'2和0'将返回0,然后'0或0'将返回第二个0.

你可以告诉我在这里非常困惑,请帮忙!

谢谢!

Fel*_*ing 10

and优先级高于or.

False and 2 or 3
Run Code Online (Sandbox Code Playgroud)

被评估为

((False and 2) or 3)
Run Code Online (Sandbox Code Playgroud)

由于第一部分(False and 2)False,Python必须评估第二部分,以查看整个条件是否仍然可以成为True.它可以,因为3计算结果True返回此操作数.

类似的1 or False and 2 or 2 and 0 or 0评估为

(1 or ((False and 2) or ((2 and 0) or 0)))
Run Code Online (Sandbox Code Playgroud)

1评估到True,整个条件将是True,无论其他操作数具有哪个值.Python可以在此时停止评估,并再次返回确定最终值的操作数.

确定最终结果的早期停止称为短路评估,可以描述如下:

每当确定表达式的最终结果时,停止评估,并在Python中返回确定最终值的操作数的值.也就是说,假设从左到右的评估:

  • 对于and运算符,最左边的操作数计算为False(或最后一个)
  • 对于or运算符,最左边的操作数计算为True(或最后一个)