我有这样的代码,其中e
是一个字典,d
是另一个字典。
e = { 'rrr':
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'a+h',
'm' : '',
},
'a' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'b+c',
'm' : '',
},
'b' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'r+d',
'm' : 'm',
},
'h' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'formula' : 'b+y',
'm' : 'm',
}
}
d = { 'r':
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'curyear' : 1,
'prevyear' : 1,
},
'd' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'curyear' : 2,
'prevyear' : 3,
},
'c' :
{ 'prefix' : 'inr',
'reference' : 'Inr',
'decimal' : 0,
'curyear' : 4,
'prevyear' : 5,
}
}
for k,v in e.iteritems():
a = re.findall('\w+', e[k]['formula'])
for i in range(0, len(a)):
if not d.has_key(a[i]):
if e.has_key(a[i]):
getValue2(e, a[i])
getvalue2
是一个像这样的递归函数
def getValue2(e, key):
b = re.findall('\w+', e[key]['formaula'])
if e.has_key(b[i]):
getValue2(e, key)
values = [d[x]['prevyear'] if x in d else 0 for x in a]
values1 = [d[x]['curyear'] if x in d else 0 for x in a]
x2 = dict(zip(a, values))
x3 = dict(zip(a, values1))
d[k] = {
'prefix' : e[k]['prefix'],
'reference' : e[k]['reference'],
'decimal' : e[k]['decimal'],
'prevyear' : eval(e[k]['formula'], x2),
'curyear' : eval(e[k]['formula'], x3),
}
e
dict有rrr
个密钥,其公式值为a+h
,其中a
是dict e
中的另一个密钥,公式值为b+c
}和b
是dict e
中的另一个关键,公式值为r+d
。 r
和d
值在dict d
中,我需要将此rrr
,a
,b
值附加到dict,但值为没有正确添加,所以我使用上面的递归函数。
在上面的函数中,这个代码必须递归调用
values = [d[x]['prevyear'] if x in d else 0 for x in a] # I am checking if k in d store that value else 0
values1 = [d[x]['curyear'] if x in d else 0 for x in a]
x2 = dict(zip(b, values)) # I am creating dict of tag,values
x3 = dict(zip(b, values1))
d[k] = {
'prefix' : e[k]['prefix'],
'reference' : e[k]['reference'],
'decimal' : e[k]['decimal'],
'prevyear' : eval(e[k]['formula'], x2),
'curyear' : eval(e[k]['formula'], x3),
}
在这种情况下
b = re.findall('\w+', e[key]['formaula'])
if e.has_key(b[i]):
getValue2(e, key)
但是这两个代码都是单一功能但我没有得到如何使用该代码......
答案 0 :(得分:0)
如果我理解正确,你希望在某种条件下递归调用某些代码。您的代码不是很清楚,所以我只是提供一般性的建议。如果您希望在条件下计算值但计算本身需要递归完成,那么您应该将递归代码移动到单独的函数中。然后,该单独的函数可以递归地调用自身。例如:
def func1(a, b, c):
func2(a, b, c)
def func2(a, b, c):
# do computation here
if condition:
func2(a2, b2, c2) # recursive call here
请注意,您必须确保func2
不会一直自行调用。递归确实必须在某个时刻结束(因此condition
在某些时候需要False
,但至少它是在每次递归调用时评估的)。您还可以使用return func2(a2, b2, c2)
返回值。