Python类堆栈帧限制

2024-04-19 06:22:34 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有以下格式的类:

class TestClass:
  def __init__(self):
    self.value = 0

  def getNewObject(self):
    return TestClass()

调用函数的次数有限制吗?例如:

obj = TestClass()
obj.getNewObject().getNewObject()

getNewObject()的返回值调用getNewObject()的次数有限制吗?如果是的话,是什么因素影响了这一点?你知道吗


Tags: selfobjreturninitvaluedef格式次数
2条回答

Python中有一个递归限制(可调),但这是不相关的。每个调用都是在前一个调用完成之后进行的,因此它们都是从堆栈帧的同一级别(即从用户代码)调用的。现在,可能会遇到行长度限制之类的问题,特别是对于交互式Python shell。你知道吗

我怀疑。让我怀疑的一个原因是,如果我们有这个功能:

def test(obj):
    obj.getNewObject().getNewObject().getNewObject()

我们disassemble it

import dis
dis.dis(test)

我们得到这个:

  2           0 LOAD_FAST                0 (obj)
              3 LOAD_ATTR                0 (getNewObject)
              6 CALL_FUNCTION            0
              9 LOAD_ATTR                0 (getNewObject)
             12 CALL_FUNCTION            0
             15 LOAD_ATTR                0 (getNewObject)
             18 CALL_FUNCTION            0
             21 POP_TOP             
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE        

那只是重复^{},然后是^{}。我无法想象,这将需要大量的内存或其他资源来管理。因此,可能没有限制。你知道吗

相关问题 更多 >