1

AFAIK:Python:为什么False或'name'返回'name'而不是False?

andor是布尔运算符和任何布尔表达式应该返回一个布尔值。

那么,为什么出现这种情况:

  • False or 'name'回报'name'而不是True
  • True and ''回报'',而不是False

请解释一下,Python是怎样处理的布尔表达式?

+0

Downvoter,请至少占有率什么可以改进? –

回答

8

不,在Python中orand操作短路并返回最后一个评估项目。

参见Boolean operations

表达x and y首先评估x;如果x为假,则返回其值;否则,将评估y并返回结果值。

表达式x or y首先评估x;如果x为真,则返回其值;否则,将评估y并返回结果值。

如果必须有一个布尔值,使用bool()

>>> bool(False or 'name') 
True 
+0

但是,当我在JavaScript和红宝石中尝试它时,它的工作原理与python中的一样。但是当我在C中尝试同样的短路时,它返回1和0,即布尔结果。由于我们使用的是cpython,它应该与C相同,但它不是。为什么? –

+0

这是python,而不是C.它在Jython,PyPy和IronPython中是一样的。该语言指出这是如何工作的,并且在许多地方使用“副作用”;例如'某些变量=其他变量或后备'。 –

+0

我不是说它是语言之间的斗争,我的意思是'和'和'or'是逻辑运算符,所以它们应该返回布尔结果,默认情况下。 –

相关问题