我对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'
我的错误是什么?我缺少哪些关键数据?
答案 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.