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()
    # ...

或者,如果您的函数确实是尾递归的,那么您不需要 pop 并且就此而言您不需要递归调用:

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