gpt4 book ai didi

python - 为什么python中的最大递归深度是1000?

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:27 27 4
gpt4 key购买 nike

我很好奇 python 中的 MRD(最大递归深度)是什么,所以我写了这个:

def call(n):
print (n)
return call(n+1)

call(1)

最终结果是 979,这对我来说是个奇怪的数字。我找不到任何地方为什么这个数字是标准的。由于我是一名自学成才的程序员,我希望能用简单的术语对其进行解释。

编辑:显然它应该是 1000,但为什么是这个数字?

最佳答案

这是一个更好的测试:

n = 0

def test_recursion_limit():
def call():
global n
n += 1
call()
try:
call()
except RuntimeError:
print(n)

test_recursion_limit()

如果将它放入 spam.py 并执行它,它应该为 python2 和 python3 返回 998。由于初始 test_recursion_limit 帧,它少了一个堆栈帧。

如果你在 REPL 中运行,比如 ipython,你已经在几帧内,所以你会看到一个较低的计数——这不是递归限制被低于,而是 REPL 本身的实现使用了一些栈帧。

>>> # freshly opened ipython session
>>> import inspect
>>> len(inspect.stack())
10

您可以通过调用 sys.getrecursionlimit() 函数来检查当前的递归限制。默认值 1000 被选为一个合理的默认值,它可以防止在您意外执行无限递归调用时占用系统资源。例如,在使用自定义 __getattr__ 实现时,这很容易做到。

如果您合理地破坏堆栈并且需要增加限制,可以使用 sys.setrecursionlimit 对其进行修改。

关于python - 为什么python中的最大递归深度是1000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40115683/

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