python意外的AttributeError

时间:2013-11-27 18:51:35

标签: python

我对python很陌生,作为一个练习,我写了一个简单的反向函数。

代码:

def m_reverse(x):
     if len(x) == 1:
             return x
     return m_reverse(x[:-1]).insert(0,x[-1])

当我尝试时,我得到以下内容:

>>> m_reverse([1,2,3,4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in m_reverse
  File "<stdin>", line 4, in m_reverse
AttributeError: 'NoneType' object has no attribute 'insert'

我的错误是什么?我缺少哪些关键数据?

1 个答案:

答案 0 :(得分:3)

使用python内置函数,如果函数在适当位置改变了参数,则按惯例返回None。因此,由于.insert会使列表发生变异,因此会返回None

你的想法很好,我认为逻辑是有道理的 - 从实现的角度来看,你可以使用列表连接,而不是使用insert

def m_reverse(lst):
    if len(lst) == 1:
       return lst
    else:
       return [lst[-1]] + m_reverse(lst[:-1])
       # return lst[-1:] + m_reverse(lst[:-1]) would also work.