0

メソッド間で参照(または呼び出し、関係なく...)スタックを渡す必要があります。コードを書き、次に注意します。何を使うのが良いですか?

これ?

def _process_value(value, *ref_stack):
    # Do something... BTW, I need to add (or return) value from cache
    # according to ref_stack         
    _process_value(value, *ref_stack + (ref_key,))  

それとも次?

def _process_value(value, ref_stack):
    # Do something...
    _process_value(value, ref_stack + (ref_key,))  

これらのメモリ、速度の問題、またはいくつかの制限はありますか? ありがとう

4

1 に答える 1

3

引数のサイズに任意の制限はありません*ref_stack: 次のコードは、メモリがなくなるまで実行されます (または、私のようであれば、スワップ ファイルを待つのに飽きて強制終了するまで):

def foo(*args):
    print(len(args))
    foo(*args + args)

関数で再割り当てされていないと仮定すると、ref_stackパフォーマンスとメモリが気になる場合は、(私にとって)明らかなことは、次のようなコードを使用したリストです。

def _process_value(value, ref_stack):
    # ...
    ref_stack.append(ref_key)
    _process_value(value, ref_stack)
    ref_stack.pop()
    # ...

または、関数が実際に末尾再帰である場合は、ポップは必要ありません。さらに言えば、再帰呼び出しも必要ありません。

def _process_value(value, ref_stack):
    while True:
        # ...
        ref_stack.append(ref_key)
于 2013-10-17T20:43:42.283 に答える