当 a 是列表时,a += number 和 a += number,(带尾随逗号)有什么区别?

What's the difference between a += number and a += number, (with a trailing comma) when a is a list?

我正在阅读一段 Python 代码,但有一件事我无法理解。 a是一个列表,num是一个整数

a += num,

有效但

a += num 

行不通。谁能给我解释一下?

使用

num,

声明一个长度为 1 的元组,而不是整数。

因此,如果 a = [0,1] 且 num = 2

a+=num,

相当于

a.extend((num,))

a.extend((2,))=[0,1,2]

a+=num

相当于

a.extend(num)

a.extend(2)

这会出错,因为您可以将元组附加到数组,但不能附加整数。因此第一个公式有效,而第二个公式给你一个错误

结尾的逗号使赋值的右侧成为一个元组,而不是一个整数。元组是一种类似于列表的容器结构(有一些区别)。比如这两个是等价的:

a += num,
a += (num, )

Python 允许您将元组添加到列表,并将元组的每个元素附加到列表。它不允许您将单个整数添加到列表中,您必须为此使用 append 。

首先,这里需要注意的是 a += 1, 在这种情况下与 a = a + 1, 的工作方式不同。 (a = a + 1,a = a + (1,) 都抛出一个 TypeError 因为你不能连接一个列表和一个元组,但是你可以 扩展 一个列表有一个元组。)

+= 调用列表 __iadd__ 方法,该方法调用 list.extend 然后 returns 原始列表本身。

1, 是一个长度为 1 的元组,所以你正在做的是

>>> a = []
>>> a.extend((1,))
>>> a
[1]

这看起来很奇怪,因为长度为一个元组。但它就像用任意长度的元组扩展列表一样工作:

>>> a.extend((2,3,4))
>>> a
[1, 2, 3, 4]