每个 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>

评估&lt;expression&gt; 部分并返回该值。如果您指定:

return

或根本没有return(但你到达函数的末尾),None 将被返回。

【讨论】:

好的,谢谢。那么在递归中,计算机只是回溯呢?在第二列(例如)中每个函数的末尾,计算机不再执行任何操作,所以它转到它停止的地方(在这种情况下是第一列,或者通常是“离开”)?这确实是我提出问题的最初动机。 @Max:是的,但是 backtracking 不是正确的词。回溯意味着机器所做的所有事情都将被还原。这里不是这种情况(并且范围不是一般的)。但实际上它看起来已经停止并继续。

以上是关于每个 Python 函数都必须在最后返回吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

你能“累积”承诺结果形成一连串“那么”吗? [复制]

我必须在javascript函数中返回一些东西吗?

c语言函数的返回值最后能输出吗?

如何利用python的赋值运算符,判断表达式是不是等值?

Go语言必须支持多返回值函数,你知道为什么吗?

Go语言必须支持多返回值函数,你知道为什么吗?