1

次の形式のクラスがある場合:

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

  def getNewObject(self):
    return TestClass()

関数を呼び出すことができる回数に制限はありますか?例えば:

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

getNewObject()の戻り値を呼び出すことができる回数に制限はありgetNewObject()ますか?もしそうなら、どのような要因がこれに影響しますか?

4

2 に答える 2

4

疑わしい。私が疑う理由の1つは、この関数がある場合です。

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

そしてそれを分解します

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        

LOAD_ATTRこれは、の後に。が続くだけの繰り返しですCALL_FUNCTION。それを管理するために多くのメモリやその他のリソースが必要になるとは想像できません。そのため、おそらく制限はありません。

于 2012-05-31T04:57:39.500 に答える
1

Pythonには再帰制限(調整可能)がありますが、それは関係ありません。各呼び出しは前の呼び出しが完了した後に行われるため、それらはすべてスタックフレームの同じレベルから(つまり、ユーザーコードから)呼び出されます。これで、特にインタラクティブなPythonシェルの場合、行の長さの制限などに達する可能性があります。

于 2012-05-31T04:57:31.997 に答える