是否每个Python函数都必须在末尾返回?
所以我画了一个递归函数的图表,让我对递归了如指掌,我注意到显然每个函数最后都执行return 另一个问题,函数究竟返回什么?传递给它的所有参数(假设有多个参数)?还是某种价值 (t只是执行实际绘图的实体)是否每个Python函数都必须在末尾返回?,python,python-3.x,recursion,return,Python,Python 3.x,Recursion,Return,所以我画了一个递归函数的图表,让我对递归了如指掌,我注意到显然每个函数最后都执行return 另一个问题,函数究竟返回什么?传递给它的所有参数(假设有多个参数)?还是某种价值 (t只是执行实际绘图的实体) def koch(t,n): “”“绘制长度为n的科赫曲线。”“” 如果n快速回答:否 详细回答:Python中不需要使用return语句,到达函数代码末尾而不返回将使函数自动returnnone 附加问题:函数返回什么? 它返回提供给return语句的对象(如果找到)。如果未找到return
def koch(t,n):
“”“绘制长度为n的科赫曲线。”“”
如果n快速回答:否
详细回答:Python中不需要使用return
语句,到达函数代码末尾而不返回将使函数自动returnnone
附加问题:函数返回什么?
它返回提供给return
语句的对象(如果找到)。如果未找到return
语句,则返回None
所以我画了一个递归函数的图表,让我对递归了如指掌,我注意到显然每个函数最后都执行return
返回本身只是意味着调用帧从调用堆栈弹出,程序计数器设置回调用前的状态,等等。根据您的评论,它看起来有点像“回溯”,但请注意,与回溯相反,函数的副作用不会被还原/撤消。例如,添加到列表、画一条线、写入文件等都不会恢复。这是递归中需要的行为
现在,有时返回某个值很有用。例如:
def foo(x,y):
return x+y
这里foo
不仅返回调用方,而且首先计算x+y
,然后返回结果,这样您就可以声明z=foo(2,3)
。因此,这里调用foo
,计算2+3
,返回5
,并分配给z
另一个问题,函数究竟返回什么?传递给它的所有参数(假设有多个参数)
在Python中,所有函数都返回一个值。如果您将其指定为:
return <expression>
或者根本没有return
(但是您到达了函数的末尾),None
将被返回。如果语句是return expression
,函数将返回表达式的结果。否则它将返回None
。是的,但此函数不计算任何值。因此它将返回None
。在这种情况下,Return仅表示返回?Return
始终表示返回。但你也带着“回报值”。如果未指定,则为None
。好的,谢谢。那么在递归中,计算机只是回溯?在第二列中每个函数的末尾(比如说),计算机不再有任何要执行的东西,所以它会转到它停止的地方(在本例中是第一列,或者通常是“左”列)?这是我提问的最初动机。@Max:是的,但回溯不是正确的词。回溯意味着机器所做的一切都将被还原。这里的情况并非如此(也不是一般情况)。但事实上,它看起来已经结束并继续。
return <expression>
return