gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:07:29 24 4
gpt4 key购买 nike

为什么这段代码会报错: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

当我测试它时,它在 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():

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

最佳答案

我相信这与 Issue #5765 有关.

Apply a hard recursion limit in the compiler [as of 3.3]

不是 100% 确定,但是这段代码 runs on 3.2.3 :

def f():
return f

eval("f" + "()" * 10000)

但是在我的 3.4.1 上失败了,这让我怀疑是这个改变导致了它。如果有人证实或否认这一点,那就太好了。

关于python - 为什么返回自身的函数在 python 3 中最大递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com