RecursionError 最大递归深度超出双端队列的扩展 class
RecursionError maximum recursion depth exceeded with an extended class from deque
我实现了一个扩展 class 如下。
from collections import deque
class IntCollection(deque):
def is_empty(self):
return len(self) == 0
def append(self, x):
self.append(x)
然后:
a = IntCollection()
a.is_empty() --> True
好的,行得通。但是,当我发出以下命令时,发生了 RecursionError
:
a.append(1)
RecursionError Traceback (most recent call last)
<ipython-input-104-da0a5ad497c3> in <module>
----> 1 a.append(1)
<ipython-input-101-7eac8c051433> in append(self, x)
6
7 def append(self, x):
----> 8 self.append(x)
... last 1 frames repeated, from the frame below ...
<ipython-input-101-7eac8c051433> in append(self, x)
6
7 def append(self, x):
----> 8 self.append(x)
RecursionError: maximum recursion depth exceeded:
我不明白出现此错误的原因。谁能解释一下?顺便说下我用的是Python3.9.4
您正在覆盖双端队列的 append
方法。当您调用它时,它只会递归地再次调用它。 Python 有一个函数可以被递归调用的最大次数,超过之后它会报错(RecursionError
)。
将方法的名称更改为其他名称将起作用:
from collections import deque
class IntCollection(deque):
def is_empty(self):
return len(self) == 0
def update(self, x): # <-- change this name
self.append(x)
a = IntCollection()
# now this work fine
a.update(1)
我实现了一个扩展 class 如下。
from collections import deque
class IntCollection(deque):
def is_empty(self):
return len(self) == 0
def append(self, x):
self.append(x)
然后:
a = IntCollection()
a.is_empty() --> True
好的,行得通。但是,当我发出以下命令时,发生了 RecursionError
:
a.append(1)
RecursionError Traceback (most recent call last)
<ipython-input-104-da0a5ad497c3> in <module>
----> 1 a.append(1)
<ipython-input-101-7eac8c051433> in append(self, x)
6
7 def append(self, x):
----> 8 self.append(x)
... last 1 frames repeated, from the frame below ...
<ipython-input-101-7eac8c051433> in append(self, x)
6
7 def append(self, x):
----> 8 self.append(x)
RecursionError: maximum recursion depth exceeded:
我不明白出现此错误的原因。谁能解释一下?顺便说下我用的是Python3.9.4
您正在覆盖双端队列的 append
方法。当您调用它时,它只会递归地再次调用它。 Python 有一个函数可以被递归调用的最大次数,超过之后它会报错(RecursionError
)。
将方法的名称更改为其他名称将起作用:
from collections import deque
class IntCollection(deque):
def is_empty(self):
return len(self) == 0
def update(self, x): # <-- change this name
self.append(x)
a = IntCollection()
# now this work fine
a.update(1)