一行与多行的布尔比较

时间:2018-10-14 11:25:52

标签: python python-3.x boolean

我不确定标题的名字。但是我一般都不是编程新手,而我正在使用python。我的问题是,如果if和else语句的工作原理完全相同,为什么只写return而不是一堆。

#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))

这两个代码都产生完全相同的结果..但是为什么呢?抱歉,我超级新手

2 个答案:

答案 0 :(得分:2)

  

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

那是不对的。仅当输入是特定类型时才如此。考虑一下这个简单的反例:

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。如果talkingTrue,则parrot_trouble2将返回TrueFalse,具体取决于hour的值。

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

答案 1 :(得分:-1)

而不是拥有

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

在函数中,您可以让它返回条件

return condition

因为您要检查返回的值相同