递归函数中的Python返回命令
在学习Python和浏览互联网时,我在w3schools.com上偶然发现了一段代码。我尝试使用他们的内置站点pythonidle和我自己的递归函数中的Python返回命令,python,recursion,return,output,Python,Recursion,Return,Output,在学习Python和浏览互联网时,我在w3schools.com上偶然发现了一段代码。我尝试使用他们的内置站点pythonidle和我自己的python3.9.0Shell运行它。我得到的是两种不同的输出 我想知道哪个输出是正确的输出,为什么它提供两种不同的输出。 代码及其输出 内置站点Python空闲 Python 3.9.0 Shell 请注意,当使用内置站点Python IDLE运行代码时,数字21只打印(输出)一次,而当使用Python 3.9.0 Shell运行代码时,数字21打印
python3.9.0
Shell运行它。我得到的是两种不同的输出
我想知道哪个输出是正确的输出,为什么它提供两种不同的输出。
代码及其输出
内置站点Python空闲
Python 3.9.0 Shell
请注意,当使用内置站点Python IDLE运行代码时,数字21只打印(输出)一次,而当使用Python 3.9.0 Shell运行代码时,数字21打印(输出)两次
我自己的调试
我尝试了一个简单的打印语句调试。检查结果只有一个不同,使用Python 3.9.0 Shell执行最后一个返回行并输出最后一个结果,而使用内置站点Python IDLE,最后一个返回要么未执行,要么未输出,在这种情况下,我相信是前者,我相信正确的输出是Python 3.9.0 Shell,但我不知道为什么会有两种不同的输出
源代码
def tri_recursion(k):
if(k>0):
result = k + tri_recursion(k-1)
print(result)
else:
result = 0
return result
tri_recursion(6)
您在末尾添加了一个
返回结果语句。对于任何IDE,除非打印该值,否则不会显示该值。但是,IDLE也会打印返回值。从技术上讲,两个输出都是正确的,因为两个口译员都配置为执行不同的操作。作为一个小例子
def foo():
return(1)
在IDLE上运行foo()
会给出>>1
,而在其他IDE上则不会给出任何结果,因为没有打印语句这两种方法都是正确的
站点上的内置python向您显示程序执行的输出。这相当于运行以下程序:
if __name__ == '__main__':
tri_recursion(6)
在代码末尾添加此项,将其另存为test.py并按如下方式运行:
python test.py
结果是一样的
pythonshell向您显示REPL(Read-Eval-Print循环)的输出,Print语句将打印到屏幕上,但函数的返回值也会打印出来,因为REPL,所以无法避免这种情况,这是出于设计
您可以将函数设计为不返回任何内容,但它不再是递归的。两者都是正确的。您需要了解python shell正在打印语句的输出。
当你写作时:
三重递归(6)
它将首先执行所有print inside函数,然后打印最后一次调用返回的值。类似于tri\u递归(6)
的行将在交互式shell中输出表达式的值。在脚本中运行时,它不会有这样的副作用。使用print(tri_recursion(6))
时,两者的输出相同。如果有小代码段,请将它们添加到问题中。当它们很大时,您可以从github或类似网站链接要点。无法复制粘贴图像中的代码以复制您的problem@schwobaseggl我想你是对的。请将其添加为answer@schwobaseggl,谢谢你的回复,我想你答对了。@TeshanShanukaJ,谢谢你的回复,我在使用小代码段时遇到了麻烦。它一直告诉我代码格式有误,我现在就尝试编辑它。