每个Python函数都必须在最后返回吗?

时间:2017-03-10 09:21:49

标签: python python-3.x recursion 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)

enter image description here

2 个答案:

答案 0 :(得分:3)

快速回答:否

答案很长:Python中不需要return语句,并且在没有返回的情况下到达函数代码的末尾将自动使函数return None

附加问题:函数返回什么?

如果找到,则返回提供给return语句的对象。如果未找到return语句,则返回None

答案 1 :(得分:3)

  

所以我正在制作递归函数的图表以包围递归,我注意到显然每个函数都在最后执行返回?

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