【问题标题】:Python "maximum recursion depth exceeded in comparison" with variable arguments. Works fine with lists, howeverPython“比较超过最大递归深度”与可变参数。但是,适用于列表
【发布时间】: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


【解决方案1】:

再次将参数传递给函数时,您缺少 *

def lst(*l):
  if l==():return None
  else: return cons(l[0],lst(*l[1:]))

您将空元组作为第一个位置参数传递,这意味着在下一次递归中 l 实际上等于 ((),) (包含一个空元组)应该是 ()

【讨论】:

    猜你喜欢
    • 2022-08-07
    • 2017-11-05
    • 2013-11-30
    • 2019-03-23
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2022-01-22
    • 2020-03-14
    相关资源
    最近更新 更多