小编典典

Python布尔表达式和或

python

在python中,如果您编写类似

foo==bar and spam or eggs

如果布尔语句为true,则python似乎返回垃圾邮件,否则返回egg。有人可以解释这种行为吗?为什么表达式不像一个长布尔值那样被求值?

编辑:具体来说,我试图弄清楚为什么该表达式的结果返回“ spam”或“ eggs”的机制。


阅读 210

收藏
2020-12-20

共1个答案

小编典典

运算符andor短路,这意味着如果仅从对第一个操作数求值就可以得出表达式的结果,则不对第二个操作数求值。例如,如果您具有表达式a or b并且a计算结果为true,那么不管什么都没关系b,表达式的结果为true,因此b不进行计算。实际上,它们的工作方式如下:

  • a and b:如果a为假,则不评估b并返回a,否则返回b。
  • a or b:如果a为真,则不评估b并返回a,否则返回b。

Falsey和Truey表示在布尔上下文中评估为false或true的值。

但是,在没有更好的选择的时候,这个和/或惯用语是有用的,但是现在有了更好的方法:

spam if foo==bar else eggs

和/或惯用语的问题(除了使初学者感到困惑之外)是,如果条件为真,但垃圾邮件的计算结果为假值(例如,空字符串),则会给出错误的结果。因此,您应该避免这种情况。

2020-12-20