递归函数中的Python返回命令

2024-05-26 00:33:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在学习Python和浏览互联网时,我在w3schools.com上偶然发现了一段代码。我尝试使用他们的内置站点pythonidle和我自己的Python 3.9.0Shell运行它。我得到的是两种不同的输出

我想知道哪个输出是正确的输出,为什么它提供两种不同的输出。

代码及其输出

内置站点Python空闲Built in site Python IDLE

Python 3.9.0 ShellPython 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,但我不知道为什么会有两种不同的输出

Print Statement Using Python 3.9.0 ShellResult Part 1Result Part 2

Print Statement Using Built-in site Python IDLEResult Part 1Result Part 2

源代码

def tri_recursion(k):
    if(k>0):
           result = k + tri_recursion(k-1)
           print(result)
    else:
           result = 0
    return result

tri_recursion(6)

Tags: 代码站点互联网数字resultshell内置tri
3条回答

您在末尾添加了一个return result语句。对于任何IDE,除非打印该值,否则不会显示该值。但是,IDLE也会打印返回值。从技术上讲,两个输出都是正确的,因为两个口译员都配置为执行不同的操作。作为一个小例子

def foo():
    return(1)

在IDLE上运行foo()会得到>>> 1,而在其他IDE上则没有,因为没有print语句

两者都是正确的,您需要了解pythonshell正在打印语句的输出。 当你写作时:

>>> tri_recursion(6)

它将首先执行所有print inside函数,然后打印最后一次调用返回的值

两者都是正确的

站点上的内置python向您显示程序执行的输出。这相当于运行以下程序:

if __name__ == '__main__':
    tri_recursion(6)

在代码末尾添加此项,将其另存为test.py并按如下方式运行:

python test.py

结果是一样的

pythonshell向您显示REPL(Read-Eval-Print循环)的输出,Print语句将打印到屏幕上,但函数的返回值也会打印出来,因为REPL,所以无法避免这种情况,这是出于设计

您可以将函数设计为不返回任何内容,但它不再是递归的

相关问题 更多 >