Python * args vs单个<tuple>参数</tuple>

时间:2013-10-17 20:15:24

标签: python function arguments tuples args

我必须在方法之间传递引用(或调用,无论......)堆栈。 我编写了代码并注意了下一步。什么更好用?

此?

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,))  

是否有这些内存,速度问题或某些限制? 感谢

1 个答案:

答案 0 :(得分:2)

*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)