【问题标题】:What does Python return when we return with logical operator?当我们使用逻辑运算符返回时,Python 会返回什么?
【发布时间】:2012-08-08 21:29:25
【问题描述】:

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

return val1 and val2 

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

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

谢谢。

【问题讨论】:

  • 我的最后一条评论:如果您期望布尔值,则使用return bool(val1 and val2) 而不是return val1 and val2
  • 它实际上是从变量返回值而不是布尔值。不过还是谢谢。
  • 好。祝你学习 Python 好运。

标签: python boolean boolean-logic


【解决方案1】:

使用andor 的表达式在可以确定表达式不会根据第一个操作数计算为True 或False 并返回最后一个计算值时发生短路:

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

这种“副作用”经常用在 python 代码中。请注意,not 确实 返回一个布尔值。详情请见python documentation on boolean operators

【讨论】:

    【解决方案2】:

    如果第一个值为真,则 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(等于第二个值)

    【讨论】:

    • 我已经知道这一点,但在我的情况下,val1 和 val2 包含值而不是布尔值,例如 val1 = "hello" val2 = "world" if True else '' 但我知道是什么原因造成的.谢谢。
    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多