为什么返回自身的函数在python 3中最大化递归

Alg*_*ary 15 python recursion python-3.x

为什么这段代码会出错:RuntimeError: maximum recursion depth exceeded during compilationprint_test从不调用自己,因此我认为它不是一个递归函数.

def print_test():
    print("test")
    return print_test

print_test() #prints 'test'
print()

#a quick way of writing "print_test()()()()()()()()()()()()()..."
eval("print_test"+"()"*10000) #should print 'test' 10000 times
Run Code Online (Sandbox Code Playgroud)

当我测试它时,它在Python 2.7.7rc1中工作但在Python 3.3.5中给出了错误.Pdb给出一个短调用堆栈,不同于超过最大递归深度时通常存在的高调用堆栈.

Traceback (most recent call last):
  File "/usr/lib/python3.3/pdb.py", line 1662, in main
    pdb._runscript(mainpyfile)
  File "/usr/lib/python3.3/pdb.py", line 1543, in _runscript
    self.run(statement)
  File "/usr/lib/python3.3/bdb.py", line 405, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "/home/beet/overflow.py", line 1, in <module>
    def print_test():
Run Code Online (Sandbox Code Playgroud)

我出于好奇而想知道这一点,并意识到这不是最好的编程实践.

Dai*_*air 9

我认为这与问题#5765有关.

在编译器中应用硬递归限制[从3.3开始]

不是100%肯定,但这段代码运行在3.2.3:

def f():
    return f

eval("f" + "()" * 10000)
Run Code Online (Sandbox Code Playgroud)

但是我的3.4.1失败了,这使我怀疑这种变化导致了它.如果有人确认或否认这将是非常酷的.