看看这个片段:
def recur(n):
ds = {}
x=do_foo(n)
if foo(n): ds[n] = recur(x)
else: return x
我想问的是 ds 在第一次迭代时是空的,然后如果为真,它会在某些条件下添加。如果它再次出现,则在第二次迭代中进入,ds[n] = recur(x)
因此在第 n 次迭代中,ds 再次定义为 ds = {}.. 或 ds 保留其先前的元素。如果没有,那么如何保留元素?
看看这个片段:
def recur(n):
ds = {}
x=do_foo(n)
if foo(n): ds[n] = recur(x)
else: return x
我想问的是 ds 在第一次迭代时是空的,然后如果为真,它会在某些条件下添加。如果它再次出现,则在第二次迭代中进入,ds[n] = recur(x)
因此在第 n 次迭代中,ds 再次定义为 ds = {}.. 或 ds 保留其先前的元素。如果没有,那么如何保留元素?
由于您发布的代码不是有效的 Python,因此很难在这里说出您想要什么,但我认为您是在问如何通过调用传递某种缓存。
这样做的方法是使缓存成为可选参数。这样你就可以在没有缓存的情况下调用你的函数,或者你可以将它传递给递归调用。
def recur(n, ds=None):
if ds is None: ds = {}
x=do_foo(n)
if foo(n):
ds[n] = recur(x, ds)
else:
return x
或者,使用一个类,它可以让您完全控制缓存将持续多长时间:
class Bar(object):
def __init__(self):
self.ds = {}
def recur(self, n):
x=do_foo(n)
if foo(n):
self.ds[n] = self.recur(x)
else:
return x
ds
作为参数添加到函数中。
def recur(n, ds=None):
ds = ds or {}
#...
recur(n, ds=ds)
像任何编程语言一样,在函数内部,您有仅在函数运行时才存在的变量:这些是局部变量。ds
此处为局部变量,仅在函数运行时存在。每当您再次运行该函数时,ds
都不会像第一次那样运行(假设您正在运行同一程序的两个实例,即使您设置了相同的参数,也有两种不同的情况)。
为了解决您的问题,有两种方法:
ds
引用它global ds
ds
作为参数传递给函数(这是处理这种情况的最佳选择)