我必须在方法之间传递引用(或调用,无论......)堆栈。 我编写了代码并注意了下一步。什么更好用?
此?
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,))
是否有这些内存,速度问题或某些限制? 感谢
答案 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)