我在互联网上搜索为什么我应该使用return False / True而不是返回但是找不到答案。
为什么我要声明返回True / False刚刚返回? 你能告诉我一个例子吗?
#if __cplusplus >= 201103L || __GNUC__ >= 3
// __func__ is available in C++11, and in GCC >= 3.0
#elif _MSC_VER || __GNUC__
// pre-C++11 MSVC and ancient versions of GCC call this
// feature __FUNCTION__ instead
#define __func__ __FUNCTION__
#elif ...
// ... etc etc for all other compilers you care about
#else
#define __func__ "<unavailable>"
#endif
答案 0 :(得分:1)
一个主要问题是你的第二个函数将以任何方式返回None
。返回一个布尔值是一种让函数的返回值在其他地方有意义/有用的方法。
如果它返回的值如True
或False
,您可以在以下情况下使用函数的返回值:
if test(8):
# do something it returns True
else:
# do something otherwise
否则,你的功能毫无意义,因为无论输入如何,test()
都会返回相同的内容。
我曾被告知函数应该“做某事”或“回复某事”。您的第二个示例函数不会“执行任何操作”,因为如果您没有根据比较结果做出某些选择,则>
比较无效。它也没有真正返回任何内容(至少没有任何意义),因为无论如何它都会返回None
- 实际上,即使你删除了return
关键字,它仍会返回{{ 1}}。
答案 1 :(得分:1)
类比:一个函数是一个可克隆的助手,可以执行任务,并给你一个答案。任务由函数的参数定义(括号内的内容)。让我们重写名称以赋予它们语义含义(即说明我们期望的名称)。
def isXGreaterThanY(.....
这里,任务的名称是&#34; X大于Y?&#34;。如果你去找你的可克隆助手,并且问X是否大于Y?&#34;,除非你告诉他们X和Y是什么,否则你的助手将无法完成你想要的任务。
def isXGreaterThanY(x, y):
.........
现在我可以开始解释你可能出错的地方。在这个级别的编程中出现的一个错误就是因为你看到的东西几乎与网页上的内容完全相同,人们可能会试图在语法上复制它并试图摆弄语法并希望它能够正常工作。这永远不会奏效。这不是编程的重点。
有些日常人认为编程是关于解决问题的神奇词汇(而不是我暗示你认为的那样)。不是这种情况。相反,编程(经典)是关于能够制作为您操纵信息的自动机(这些小助手)。死记硬背,机械操纵信息是计算机擅长的。我们希望我们的任务可以复制,所以我们给它们命名为&#34; X大于Y?&#34;,并将它们指定为已知的,适当地,作为程序(又称功能)。
让我们考虑你写的内容:
def isXGreaterThanY(x, y):
if x > y:
return True
else:
return False
程序完全是关于控制流程。该过程的每个部分都是语句或表达式(在此级别,您可以认为它们是相同的事物)。一个程序通常有一个答案:每当控制流命中一个&#34;返回ANSWER&#34;声明,整个程序停止(任务完成),你的魔法助手会在一张纸上写上ANSWER
的答案返回给你。一个返回答案的程序被称为“功能”,这几乎总是我们想要的(丑陋的程序和副作用&#39;幕后通常不是我们的要)。
下面,我将阐述将语法(我们写下来的内容)带到机械动作的想法。一个过程由句法表达式组成,每个表达式可能有子表达式等。
if __ then __ else __
语句,它由三个子表达式组成:
x > y
的查询子句,包括:
_ > _
运算符代理:
return True
的条款,包括:
return
语句,返回:
True
return False
的条款,包括:
return
语句,返回:
False
这个语法树&#39;是计算机看到的。现在,编程语言将这些表达式的意义联系起来:它知道如何在所谓的&#34;控制流&#34;中导航这个树。特别是在编程语言Python中,我们知道当我们看到if-then-else语句时,首先我们检查测试条件。在这种情况下,我们查看测试条件并注意它是一个裸体比较(我们询问CPU,它给出了True或False)。如果比较结果为真,我们将执行&#34;然后&#34;条款,返回;即给你一张纸,上面写着答案True
。如果比较是错误的,我们会做&#34;否则&#34;条款,并给你一张纸条,上面写着答案False
。
这样,每当你问你的助手时,X是否大于Y?在X = ...和Y = ...&#34;的情况下,您的助手(实际上)将查看您在程序中指定的说明,并在助理的眼中解释它们总是固定在一个表达式上(&#34;控制流&#34;可以被认为是一个突出显示或带下划线的活动&#39;子表达式,即控制流是你的助手的路径通过代码查看眼睛)。在这种特殊情况下,您的过程以if-then-else子句开头,它将其解释为控制流中的分支点(路上的分叉);它需要适当的分支,在这种情况下,将发现两个&#39;返回&#39;之一。陈述,然后尽职尽责地给你一张纸。
控制流由特殊控制流语句后面的语义(含义)决定,例如if-then-else。其他控制流结构的解释不同。 for x in range(7): ...
假装x为1并执行...
,假装x为2并执行...
等。
while True: ...
将永远循环,一遍又一遍地执行...
。
break
(突破)表示&#34;停止while循环&#34;或者&#34;过早地停止for循环&#34;。
continue
表示&#34;在此while / for循环中跳过...
的其余部分,但继续循环&#34;。
您可以使用上面和您自己的自定义函数实现您自己的控制流,使用所谓的递归(此答案的范围之外的另一个主题)。
简而言之,就是控制流程和命令式编程。
顺便说一下,做这件事的形式更好:
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)