0

我在上课,我想我可以试着让一个课程循环

这是我所做的:

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__()

只是想知道为什么会突然发生这种情况,为什么它不一直循环?

4

2 回答 2

2

每个函数调用都会创建一个堆栈帧,每次返回都会从堆栈中弹出一个帧。这意味着如果你递归太深而没有返回,Python 将耗尽堆栈空间并抛出异常。您可以增加限制,但大多数情况下,这只会使您的程序在崩溃之前运行更长时间,或者更糟糕的是,Python 解释器会破坏其内存并发疯。

于 2013-07-22T21:28:59.490 回答
1

在 python 中有一个最大递归限制。默认值为 1000。您可以通过键入以下内容来查看:

import sys
print sys.getrecursionlimit()

在终端。

如果你想增加它使用:

sys.setrecursionlimit(10000) # 10000 is just an example
于 2013-07-22T21:24:57.080 回答