我正在搞乱课程,并认为我可以尝试让课程循环
这就是我所做的:
class A():
def __init__(self):
print 1
self.loop()
def loop(self):
print 2
self.__init__()
A()
它打印1& 2回到第四,然后我得到一个错误,开始循环看起来像这样:
Traceback (most recent call last):
File "C:/Python27/classloop.py", line 12, in <module>
A()
然后它开始将这两个错误循环回第四个:
File "C:/Python27/classloop.py", line 4, in __init__
self.loop()
File "C:/Python27/classloop.py", line 9, in loop
self.__init__()
只是想知道为什么这种情况突然发生,为什么它不会继续循环?
答案 0 :(得分:2)
每个函数调用都会创建一个堆栈帧,每个返回都会从堆栈中弹出一个帧。这意味着如果你在没有返回的情况下进行太深的递归,Python将在堆栈上耗尽空间并抛出异常。您可以增加限制,但大多数情况下,这只会使您的程序在崩溃之前运行一段时间,或者更糟糕的是,Python解释器会破坏其内存并变得疯狂。
答案 1 :(得分:1)
在python中有一个最大递归限制。 默认值为1000。 您可以通过输入以下内容来查看:
import sys
print sys.getrecursionlimit()
在终端。
如果你想增加它,请使用:
sys.setrecursionlimit(10000) # 10000 is just an example