我有这段代码:
another_list
其中condition
是在其他地方定义的列表,我可以访问它。
当给定的排名符合某个another_list
时,我会循环显示function
而我正在添加排名,但当然每当我拨打new_list
,new_list
时重置并删除其中的所有值。
我希望new_pos
包含所有function
值,并且每次调用{{1}}时都不会重置,我只希望在我告诉它时将其清除。我该怎么做到这一点?
答案 0 :(得分:2)
这通常通过向函数添加一个参数来保存“记住的”值并给它一个默认值来完成,因此不必将其提供给最高级别的调用。如果它是那种类型的函数(而不是仅为其副作用执行的函数),函数可以返回如下所示的值,如图所示。
def function(pos, new_list=None):
if new_list is None:
new_list = []
if condition:
for x in range(0,len(another_list)):
new_pos = another_list[x]
new_list.append(new_pos)
function(new_pos, new_list)
return new_list
# same usage
pos = 42
result_list = function(pos)
答案 1 :(得分:0)
我认为这可能对你有帮助。
def function(first_pos):
def foo(pos):
if condition:
for x in range(0, len(another_list)):
new_pos = another_list[x]
new_list.append(new_pos)
foo(new_pos)
new_list = []
foo(first_pos)
return new_list
答案 2 :(得分:0)
如果您尝试累积每个函数调用的结果,可以将函数的最后一行更改为:
return new_list + function(new_pos)
然后,您还需要在return new_list
不满意的情况下添加condition
。
这种性质的通用递归函数可能如下所示:
def generic_function(param):
# break recursion when condition is not met
if not condition:
return []
else:
temporary_list = []
# do stuff
return temporary_list + generic_function(new_param)
这可能比尝试通过递归“记住”对象更好。如果事实证明确实有必要,请参阅解决该问题的martineau's answer。
答案 3 :(得分:-1)
new_list=[]
需要是函数中具有默认值的参数,因此您将其传递给下一个调用,但是当您第一次调用它时,它会默认为空列表