0

假设我有类似这个示例代码的东西。

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

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

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

4

1 回答 1

2

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

于 2013-11-06T04:35:25.927 回答