Alg*_*ary 15 python recursion python-3.x
为什么这段代码会出错:RuntimeError: maximum recursion depth exceeded during compilation?print_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)
我出于好奇而想知道这一点,并意识到这不是最好的编程实践.
我认为这与问题#5765有关.
在编译器中应用硬递归限制[从3.3开始]
不是100%肯定,但这段代码运行在3.2.3:
def f():
return f
eval("f" + "()" * 10000)
Run Code Online (Sandbox Code Playgroud)
但是我的3.4.1失败了,这使我怀疑这种变化导致了它.如果有人确认或否认这将是非常酷的.
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |