extend()和+;在列表中-python

extend()和+;在列表中-python,python,list,concatenation,extend,Python,List,Concatenation,Extend,我想知道l1+l2和l1.extend(l2)之间的确切区别是什么,因为它们都连接python中的列表 关于同一个问题,我已经浏览了下面的帖子 我很清楚extend()涉及函数调用,因此可能会有点贵。l1+l2选项也不能用于非局部变量 但在我的例子中,我有一个递归代码,它最终返回两个列表的串联。我使用了extend方法l1.extend(l2)。我得到了以下错误 “非类型”对象不可编辑 “NoneType”类型的对象没有len() 但请注意,列表不是None或NoneType。 我甚至试着打印

我想知道l1+l2和l1.extend(l2)之间的确切区别是什么,因为它们都连接python中的列表

关于同一个问题,我已经浏览了下面的帖子

我很清楚extend()涉及函数调用,因此可能会有点贵。l1+l2选项也不能用于非局部变量

但在我的例子中,我有一个递归代码,它最终返回两个列表的串联。我使用了extend方法l1.extend(l2)。我得到了以下错误

“非类型”对象不可编辑

“NoneType”类型的对象没有len()

但请注意,列表不是None或NoneType。 我甚至试着打印类型(l1)和len(l1),类型是list

但有一点是,若我用l1+l2替换extend方法,整个代码运行良好,并且并没有出现任何错误

我能知道为什么会这样吗?有什么想法/建议吗

>>> print(l1.extend(l2))
None

l1.extend(l2)
在l1已更新时返回none。错误(但没有代码我们无法确定)可能是您需要再次将
l1.extend(l2)
赋值给一个(新)变量。

您清楚地知道其中的区别,所以请立即找出代码返回None类型的原因。请添加一个说明相同情况的示例。
l1+l2
创建一个新列表,独立于任一输入列表,并返回该列表
l1.extend(l2)
修改
l1
,不返回任何内容。这些代码甚至不可能是可互换的。谢谢jasonharper。要知道,l1.extend(l2)只修改列表,但不返回任何值,也不返回修改后的l1列表。。谢谢谢谢你,罗纳德。要知道,l1.extend(l2)只修改列表,但不返回任何值,也不返回修改后的l1列表。。谢谢确切地列表已“就地”更新。我自己犯了那个错误;-)是 啊知道了。。非常感谢你的帮助……:):)