我对 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'
我的错误是什么?我缺少任何关键数据吗?
最佳答案
对于 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.
关于python 意外的属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250672/