为什么Python列表有一个extend方法?

时间:2016-08-17 12:54:54

标签: python list

a_list.extend(list2)做什么(或做得更好)a_list += list2没有做什么?

这一切都是真的,除非观察到如果.extend()返回扩展列表就可以得到答案,这样你就可以级联另一个方法。但事实并非如此,所以你不能。

2 个答案:

答案 0 :(得分:10)

list.extend()表达式,可以嵌入更大的表达式中。 +=(扩充赋值)是语句,语句永远不能嵌入表达式中。

所以你可以这样做:

doubled_extender = lambda l, it: l.extend(v for v in it for _ in range(2))

但你不能在那里使用+=

请注意,对于list个对象,+=使用的object.__iadd__() special methodcalls list.extend() directly在返回self之前。

最后但并非最不重要的是,the Augmented Assignments featurelist.extend()之后的语言中添加了download Spark

答案 1 :(得分:2)

.extend的另一个好处是你可以在全局列表中调用它,因为它只会改变列表,而+=将无法在该上下文中工作,因为你无法分配给全局在当地范围内。

演示

a_list = ['one']
list2 = ['two', 'three']

def f():
    a_list.extend(list2)

def g():
    a_list += list2

f()
print(a_list)
g()
print(a_list)

<强>输出

['one', 'two', 'three']
Traceback (most recent call last):
  File "./qtest.py", line 43, in <module>
    g()
  File "./qtest.py", line 39, in g
    a_list += list2
UnboundLocalError: local variable 'a_list' referenced before assignment

但是,如果您也使用切片分配,可以使用+=,因为这也是原始列表的变异:

a_list = ['one']
list2 = ['two', 'three']

def g():
    a_list[:] += list2

g()
print(a_list)

<强>输出

['one', 'two', 'three']