当 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]
我正在阅读一段 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]