为什么这个Python脚本会创建一个无限循环? (递归)

为什么这个Python脚本会创建一个无限循环? (递归),第1张

概述为什么/如何创建一个看似无限的循环?错误地,我认为这会导致某种形式的堆栈溢出类型错误. i = 0def foo () : global i i += 1 try : foo() except RuntimeError : # This call recursively goes off toward infinity, app 为什么/如何创建一个看似无限的循环?错误地,我认为这会导致某种形式的堆栈溢出类型错误.
i = 0def foo () :    global i    i += 1    try :        foo()    except RuntimeError :        # This call recursively goes off toward infinity,apparently.        foo()foo()print i
@H_502_4@解决方法 如果您将代码更改为
i = 0def foo ():    global i    i += 1    print i    try :        foo()    except RuntimeError :        # This call recursively goes off toward infinity,apparently.        foo()    finally:        i -= 1        print ifoo()

你会发现输出振荡低于999(1000是Python的默认递归限制).这意味着,当达到限制(RuntimeError)时,foo()的最后一次调用终止,另一个被设置为立即替换它.

如果您引发KeyboardInterrupt,您将观察整个跟踪是如何立即终止的.

UPDATE

有趣的是,foo()的第二次调用不受try … except-block的保护.因此,应用程序最终将终止.如果您将递归限制设置为较小的数字,例如,这将变得很明显. sys.setrecursionlimit(3)的输出:

$python test.py121210Traceback (most recent call last):  file "test.py",line 19,in <module>    foo()  file "test.py",line 14,in foo    foo()  file "test.py",in foo    foo()RuntimeError
@H_502_4@ @H_502_4@ 总结

以上是内存溢出为你收集整理的为什么这个Python脚本会创建一个无限循环? (递归)全部内容,希望文章能够帮你解决为什么这个Python脚本会创建一个无限循环? (递归)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存