Python和函数递归中的函数

时间:2013-11-06 04:28:19

标签: python recursion

说我有这样的示例代码。

def foo(n):
   def bar():
      return -1
   if n = 0:
      return 0
   else:
      return foo(n+bar())

我假设每次foo被递归调用时它会创建一个新的bar实例。然而,这似乎可以在python(或任何其他语言)中进行优化,但我无法找到任何说明它是否已针对此进行优化。

我在foo中定义了bar的原因是我试图隐藏用户栏和python的_bar()或__bar()“请先生不要使用这个亲爱的用户”让我很烦,因为我受过训练用非脚本语言。

1 个答案:

答案 0 :(得分:2)

def是Python中的可执行语句(class也是如此)。每次调用bar时都会创建foo()的新函数对象,但这是非常简单的成本。它只检索已编译的代码对象,并将其包装在新的函数对象中。人们过分强调这个waaaay ;-)一般来说,为了使闭包正常工作并捕获适当的默认参数,必须这样做。你是对的,在很多情况下这个可以进行一些优化,但CPython的实现并没有打扰。