[英]recursion in Python dictionary
我正在通过Python在字典中实现一个switch / case表达式。 谁能告诉我为什么下面的递归调用是错误的?
我遇到异常: RuntimeError: maximum recursion depth exceeded
def rec(x):
return {
'a': 'one',
'b': 'two',
'ac': rec('a'),
}.get(x,x)
获得无限递归的原因是因为您要告诉Python将递归调用rec('a')
的结果存储在字典中。 这意味着它无条件地递归,因为您总是在进行查找之前先构建字典。
解决此问题的一种方法是将lambda
函数存储在字典中,然后仅调用get
。 在此版本中,仅当传入适当的x
值时才进行递归调用:
def rec(x):
return {
'a': lambda: 'one',
'b': lambda: 'two',
'ac': lambda: rec('a'),
}.get(x, lambda: x)()
不幸的是,这有点麻烦。 我不确定是否只有三个案例和一个默认案例。 我只是使用一系列的if
语句,即使那可能不像字典查找那样有效。
您的字典值不会被懒惰地放入,这意味着它总是创建字典
{
'a': 'one',
'b': 'two',
'ac': rec('a'),
}
无论您是否查找'ac'
。 因此,您不能仅在递归调用中查找'a'
,而是必须首先做出dict(递归另一层)。
您必须以另一种方式编写此代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.