a_list.extend(list2)
做什么(或做得更好)a_list += list2
没有做什么?
这一切都是真的,除非观察到如果.extend()
返回扩展列表就可以得到答案,这样你就可以级联另一个方法。但事实并非如此,所以你不能。
答案 0 :(得分:10)
list.extend()
是表达式,可以嵌入更大的表达式中。 +=
(扩充赋值)是语句,语句永远不能嵌入表达式中。
所以你可以这样做:
doubled_extender = lambda l, it: l.extend(v for v in it for _ in range(2))
但你不能在那里使用+=
。
请注意,对于list
个对象,+=
使用的object.__iadd__()
special method,calls list.extend()
directly在返回self
之前。
最后但并非最不重要的是,the Augmented Assignments feature在list.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']