Python“比较时超过了最大递归深度”,带有可变参数.与列表一起正常工作,但是

我有以下功能:

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))

这是什么问题,如何处理这种奇怪的行为?

解决方法:

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

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

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

上一篇:c#-从数据库填充函数字典


下一篇:python-在元组上分配字符串