每个 Python 函数都必须在最后返回吗? [复制]
Posted
技术标签:
【中文标题】每个 Python 函数都必须在最后返回吗? [复制]【英文标题】:Does every Python function have to return at the end? [duplicate] 【发布时间】:2017-07-31 13:49:55 【问题描述】:所以我制作了一个递归函数的图表来围绕递归,我注意到显然每个函数都在最后执行 return?
另一个问题,函数究竟返回什么?传递给它的所有参数(假设有多个参数)?还是某种价值?
(t只是一个实体,执行实际绘图)
def koch(t, n):
"""Draws a koch curve with length n."""
if n<30:
fd(t, n)
return
m = n/3.0
koch(t, m)
lt(t, 60)
koch(t, m)
rt(t, 120)
koch(t, m)
lt(t, 60)
koch(t, m)
【问题讨论】:
如果语句为return expression
,则函数返回表达式的结果。否则返回None
。
是的,但是这个函数不计算任何东西。
所以它返回None
。
在这种情况下返回只是意味着回到那个时候?
return
总是意味着返回。但你也随身携带一个“回报价值”。如果不指定,则为None
。
【参考方案1】:
快速回答:否
长答案:return
语句在 Python 中不是必需的,在没有返回的情况下到达函数代码的末尾将使函数自动 return None
附加问题:函数返回什么?
如果找到一个对象,它将返回提供给return
语句的对象。如果没有找到return
语句,则返回None
。
【讨论】:
【参考方案2】:所以我制作了一个递归函数的图表来围绕递归,我注意到显然每个函数都在最后执行 return?
return 本身仅仅意味着 调用帧 从 调用堆栈,程序计数器中弹出被设置回您拨打电话之前的状态等。根据您的评论,它看起来有点像“回溯”,但请注意 - 与回溯相反- 功能具有的副作用,不会被还原/撤消。例如,追加到列表、画线、写入文件等不会被还原。这是递归的期望行为。
现在有时返回某个值很有用。例如:
def foo(x,y):
return x+y
这里foo
不仅返回给调用者,而且首先计算x+y
并返回结果,这样你就可以声明z = foo(2,3)
。所以这里调用foo
,评估2+3
,返回5
并分配给z
。
另一个问题,函数究竟返回什么?传递给它的所有参数(假设有多个参数)?
在 Python 中,所有 函数都会返回一个值。如果你像这样指定它:
return <expression>
评估<expression>
部分并返回该值。如果您指定:
return
或根本没有return
(但你到达函数的末尾),None
将被返回。
【讨论】:
好的,谢谢。那么在递归中,计算机只是回溯呢?在第二列(例如)中每个函数的末尾,计算机不再执行任何操作,所以它转到它停止的地方(在这种情况下是第一列,或者通常是“离开”)?这确实是我提出问题的最初动机。 @Max:是的,但是 backtracking 不是正确的词。回溯意味着机器所做的所有事情都将被还原。这里不是这种情况(并且范围不是一般的)。但实际上它看起来已经停止并继续。以上是关于每个 Python 函数都必须在最后返回吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章