Python 一行与多行中的布尔比较

Python 一行与多行中的布尔比较,python,python-3.x,boolean,Python,Python 3.x,Boolean,我不知道该叫什么名字。但我对编程基本上是新手,我正在使用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, hou

我不知道该叫什么名字。但我对编程基本上是新手,我正在使用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))
#多行
def parrot_故障(谈话,小时):
如果说:
如果第20小时:
返回真值
返回错误
#一行
def parrot_故障(谈话,小时):
返回(通话和(小时<7或小时>20))
这两种代码产生完全相同的结果。。但是为什么呢?对不起,我是全新的,而不是

if condition == True:
    return True
else:
    return False
在函数中,您可以让它返回条件

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

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

那是不对的。只有在输入为特定类型时才是正确的。考虑这个琐碎的反例:

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)  # []
def parrot_trouble1(说话,小时):
如果说:
如果小时数<7或小时数>20:
返回真值
返回错误
def parrot_trouble2(说话,小时):
返回(通话和(小时<7或小时>20))
鹦鹉_麻烦1([],0)#错误
鹦鹉麻烦2([],0)#[]
请注意,
以及
都不会限制它们返回的值和类型 到
False
True
,而是返回最后一个计算的参数

parrot_trouble2
显示短路。让我们假设
对话
是一个布尔输入。如果
talking
False
,则表达式短路并返回
False
。如果
talking
True
parrot\u trouble 2
将根据
hour
的值返回
True
False


parrot_trouble1
不会短路,但结果相同。如果
talking
为布尔值且
False
,则函数返回
False
。如果
通话
,则测试第二个标准
小时数<7或小时数>20
。如果没有指定条件,那么,由于没有返回任何内容,Python移动在
If
语句的外部和后面,以
return False

的形式进行更新。谢谢,这确实帮助我了解了发生的情况。