【发布时间】:2014-06-03 04:36:48
【问题描述】:
我有以下功能:
def lst(*l):
if l==():return None
else: return cons(l[0],lst(l[1:]))
当我运行它时,我得到“比较超过最大递归深度”。奇怪的是,当我添加一个将参数元组转换为列表的变形器时,一切正常:
def lst(*l):
return _lst(list(l))
def _lst(l):
if l==[]:return None
else: return (l[0],_lst(l[1:]))
>>> lst(1,2)
(1, (2, None))
这是什么问题以及如何处理这种奇怪的行为?
【问题讨论】:
-
你能把实际工作的代码也贴出来吗?
-
将
if l==():return None替换为if not l: return None。另外,cons是做什么的?您也许可以将其替换为reduce。 -
感谢您的建议,@IceArdor。
cons是这样的构造函数:def __init__(self,car,cdr):self.car=car;self.cdr=cdr。我试图用reduce替换递归,但是出了点问题(似乎reduce工作“错误”的方向),我完全不知道如何以正确的方式获得它。只要我有一个工作代码,感谢 Samy Arous,我不希望它被破坏。还是谢谢你。
标签: python list python-3.x recursion tuples