【问题标题】:Boolean comparisons in one line vs multiple lines单行与多行的布尔比较
【发布时间】:2018-10-14 11:25:52
【问题描述】:

我不知道如何命名标题。但我一般是编程新手,我正在使用 python。我的问题是,为什么只写 return 而不是一堆 if 和 else 语句的工作方式完全相同。

#Multiple lines
def parrot_trouble(talking, hour):
  if talking:
    if hour <7 or hour >20:
      return True
  return False
#One line
def parrot_trouble(talking, hour):
  return (talking and (hour < 7 or hour > 20))

这两个代码产生完全相同的结果.. 但为什么呢?对不起,我是超级新人

【问题讨论】:

  • 已更新

标签: python python-3.x boolean


【解决方案1】:

这两个代码产生完全相同的结果

这是不正确的。仅当输入具有特定类型时才成立。考虑这个微不足道的反例:

def parrot_trouble1(talking, hour):
    if talking:
        if hour < 7 or hour > 20:
            return True
    return False

def parrot_trouble2(talking, hour):
    return (talking and (hour < 7 or hour > 20))

parrot_trouble1([], 0)  # False
parrot_trouble2([], 0)  # []

But note and / or are designed this way:

请注意,andor 都不会限制它们返回的值和类型 到FalseTrue,而是返回最后评估的参数。

parrot_trouble2 出现短路。假设talking 是一个布尔输入。如果talkingFalse,则表达式短路并返回False。如果talkingTrueparrot_trouble2 将根据hour 的值返回TrueFalse

parrot_trouble1 不会短路,但结果是一样的。如果talking 是布尔值且False,则函数返回False。如果talkingTrue,则测试第二个标准hour &lt; 7 or hour &gt; 20。如果未指定条件,则由于没有返回任何内容,Python 将在 if 语句之后移动到 return False

【讨论】:

  • 谢谢你,这真的帮助我理解了发生了什么。
【解决方案2】:

而不是拥有

if condition == True:
    return True
else:
    return False

在一个函数中,你可以让它返回条件

return condition

因为您正在检查您将返回的相同值

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多