【问题标题】:Return True/False - when to use it over just returnReturn True/False - 何时使用它而不是返回
【发布时间】:2016-08-19 15:06:03
【问题描述】:

我已经在互联网上搜索了为什么我应该使用 return False/True 而不是 return 但找不到答案。

为什么我想让语句返回 True/False 而不是 return ? 能给我举个例子吗?

def test(var):
    if var > 5:
        return True
    else:
        return False

test(8)
>>> True
#------------------------

def test(var):
    if var > 5:
        return
    else:
        return

test(8)
>>> None

【问题讨论】:

  • Erm,如果您希望函数返回 True 或 False 值,可以使用它。你认为你的第二个函数实际上在做什么?
  • 如果您要发布 python 代码,请使用适当的缩进发布。严重缩进的python代码是无稽之谈。
  • 欢迎来到 Stack Overflow!这个问题可以从表面上回答,但我认为它揭示了一个巨大的理解差距,简单地回答它并不能解决问题。我建议去许多编程教程之一,比如 codecademy.com 来学习编程的基础知识。
  • def test(var): 可以只是return var > 5
  • 为你的方法命名会对它们的调用者产生很大的影响。 test(var) 对我来说毫无意义,testVarOver5(var) 不过。这似乎表明一个是或否的答案,这将转化为返回真或假。此外,您的第二个函数具有负面意义,您为什么要测试条件并从两者返回相同的结果,此时您的方法应该只是 def test(var): return 并且它具有相同的功能

标签: python python-2.7


【解决方案1】:

类比:函数是一个可克隆的助手,准备好执行一项任务,并给你一个答案。任务由函数的参数(括号内的内容)定义。让我们重写名称以赋予它们语义含义(即说明我们所期望的名称)。

def isXGreaterThanY(.....

这里,任务的名称是“X 是否大于 Y?”。如果你走到你的可克隆助手面前问“X 比 Y 大吗?”,除非你告诉他们 X 和 Y 是什么,否则你的助手将无法完成你想要的。

def isXGreaterThanY(x, y):
    .........

现在我可以开始解释你可能出错的地方了。这种编程级别的一个错误是,仅仅因为您在网页上看到的东西几乎可以满足您的需求,人们可能会想从语法上复制它并尝试摆弄语法并希望它能够正常工作。这永远不会奏效。这不是编程的重点。

一些日常的人认为编程是关于解决你的问题的魔术词(不是我暗示你认为的)。不是这种情况。相反,编程(经典)是关于能够制造自动机(这些小助手)来为您操纵信息。对信息进行机械的机械操作是计算机擅长的。不过,我们希望我们的任务是可复制的,因此我们给它们命名,例如“X 是否大于 Y?”,并在已知的情况下将它们指定为 procedures(也称为函数)。 p>

让我们考虑一下你写的内容:

def isXGreaterThanY(x, y):
    if x > y:
        return True
    else:
        return False

一个过程就是控制流。过程的每一部分要么是一个语句,要么是一个表达式(在这个级别上,你可以认为它们是相同的东西)。一个过程通常有一个答案:每当控制流遇到“return ANSWER”语句时,整个过程就会停止(任务完成),你的魔法助手会在一张纸上返回给你答案上面写着ANSWER。返回答案的过程称为“函数”,这几乎总是我们想要的(在幕后产生丑陋“副作用”的过程通常不是我们想要的)。

下面,我将说明将我们从语法(我们写下的内容)带到机械动作的想法。一个过程由句法表达式组成,每个表达式都可以有子表达式等。

  • 我们有if __ then __ else __ 语句,它由三个子表达式组成:
    • x > y的查询子句,包括:
      • _ > _ 运算符作用于:
        • 变量 x
        • 变量 y
    • return True 的“then”子句,包括:
      • return 语句,返回:
        • 文字布尔值True
    • return False 的“else”子句,包括:
      • return 语句,返回:
        • 文字布尔值False

这个“语法树”是计算机看到的。现在,编程语言将含义与这些表达式相关联:它知道如何在所谓的“控制流”中导航这棵树。特别是,在编程语言 Python 中,我们知道当我们看到 if-then-else 语句时,首先我们会检查测试条件。在这种情况下,我们查看测试条件并注意到它是一个赤裸裸的比较(我们询问 CPU,它会返回 True 或 False)。如果比较为真,我们将执行“then”子句,该子句返回;即递给你一张纸条,上面有答案True。如果比较是错误的,我们会执行“else”子句,并给你一张纸条,上面写着False的答案。

这样,每当您问助手“X 是否大于 Y?其中 X=... 和 Y=...”时,您的助手将(实际上)查看您在程序,并解释它们,助手的眼睛一次总是固定在一个表情上(“控制流”可以被认为是突出显示或下划线的“活动”子表达式,即控制流是助手的眼睛在看时所采用的路径通过代码)。在这种特殊情况下,您的过程以 if-then-else 子句开始,它将其解释为控制流中的一个分支点(道路上的一个岔路口);它采用适当的分支,在这种情况下,会发现两个“返回”语句中的一个,然后尽职尽责地给你一张纸条。

控制流由特殊控制流语句(例如 if-then-else)背后的语义(意义)决定。其他控制流结构的解释不同。 for x in range(7): ... 将假装 x 为 1 并执行 ...,假装 x 为 2 并执行 ... 等等。

while True: ... 将永远循环,一遍又一遍地执行 ...

break(中断)表示“停止 while 循环”或“过早停止 for 循环”。

continue 表示“在此 while/for 循环中跳过 ... 的其余部分,但继续循环”。

您可以使用上述和您自己的自定义函数实现自己的控制流,使用所谓的递归(此答案范围之外的另一个主题)。

简而言之,就是控制流和命令式编程。


顺便说一句,这样做更好:

def isXGreaterThanY(x, y):
    # this is a comment
    # you can insert a print x>y here, or print(x>y) depending on your version of python
    return (x > y)

表达式x > y 在输入 if-then-else 语句之前计算结果为 True/False。因此,您可以只返回表达式作为答案。但是,到那时,您的函数已经足够简单,以至于您不会编写函数答案:

#print isXGreaterThanY(1,3)
print (1 > 3)

【讨论】:

    【解决方案2】:

    一个主要问题是您的第二个函数将返回None。返回布尔值是一种让函数的返回值在其他地方有意义/有用的方法。

    如果它返回一个类似TrueFalse 的值,您可以反过来在以下情况下使用函数的返回值:

    if test(8):
        # do something it returns True
    else:
        # do something otherwise
    

    否则,您的函数将毫无意义,因为test() 将返回相同的内容,而不管输入如何。

    曾经有人告诉我,函数应该“做某事”或“返回某事”。您的第二个示例函数不会“做任何事情”,因为如果您没有根据比较结果做出选择,> 比较无效。它也没有真正返回任何东西(至少没有任何意义),因为无论如何它都会返回None - 事实上,即使你删除了return 关键字,它仍然只会返回None

    【讨论】:

    • 感谢您的评论 - 这是我想看到的 - 如何在其他地方使用 True/False。也许这是一个非常菜鸟的问题,但我才刚刚开始。
    • @user6735313 请阅读关于函数的python教程,特别是关于如何使用函数值,你可以试试这个链接获取一些信息:anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/…
    • @user6735313 很高兴为您提供帮助。当我第一次开始编程时,我在理解函数和返回值时遇到了很多麻烦。现在看起来很简单,我和他们有很多经验,但就在不久之前,我已经忘记了成为菜鸟的感觉。除了 cmets 中链接的教程,我还推荐 Codecademy 的教程:codecademy.com/learn/python。如果你通过实践学习得更好,我认为它非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2016-03-23
    • 2014-04-24
    相关资源
    最近更新 更多