2

我正在阅读别人的代码,他有这样的东西:

return val1 and val2 

我在 Python 解释器中尝试了这个,它给了我 AND 上的后一个值,而 OR 给了我之前的值。

所以我的问题是该声明中到底发生了什么?

谢谢。

4

2 回答 2

11

当一个表达式使用andoror短路时,它可以根据第一个操作数确定表达式不会计算为 True 或 False,并返回最后一个计算值:

>>> 0 and 'string'
0
>>> 1 and 'string'
'string'
>>> 'string' or 10
'string'
>>> '' or 10
10

这种“副作用”经常用在 python 代码中。请注意,它not 确实返回一个布尔值。有关详细信息,请参阅有关布尔运算符的 python 文档

于 2012-08-12T09:02:56.653 回答
3

如果第一个值为真,则 AND 语句等于第二个值。否则它等于第一个值。

如果 OR 语句为真,则等于第一个值,否则等于第二个值。

请注意,在 Python 中,可以将对象评估为布尔值。所以"bla" and False将评估为第二个值,因为第一个值为真(它是一个非空字符串和bool("string") = True)。

这就是在 Python(和多种其他编程语言)中评估布尔语句的方式。例如:

  • True and False= False(等于第二个值,因为第一个值为真)
  • False and True= False(等于第一个值,因为第一个值不正确)
  • True and True= True(等于第二个值,因为第一个值为真)
  • True or False= True(等于第一个值,因为它是真的)
  • False or True= True(等于第二个值)
于 2012-08-12T08:57:10.880 回答