Python:递归:通过调用向下传递一些值
请看这个片段:Python:递归:通过调用向下传递一些值,python,Python,请看这个片段: 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保留其以前的元素。如果没有,那么如何保留元素?很难说出您在这里想要什么,因为您发布的代码不是有效的Pyt
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