我看到了这样的Python语法:
l = []
l += 8,
l
的结果是[8]
,显然是8
之后的逗号更改整数可迭代,以便它可以添加列表。
没有逗号:
l = []
l += 8
错误为TypeError: 'int' object is not iterable
我在线搜索,但没有找到任何有用的这种语法解释。是否有任何文档可以引用Python中的逗号或逗号的任何其他用法?谢谢。
答案 0 :(得分:0)
这是旧的,但我最近试图理解相同的语法,这就是我发现的:
l=[]
l+=8,
此代码包含两部分 -
单个值后跟逗号会创建一个具有单个值的元组(可迭代),因此,
l+=8, ## implies l+=(8,)
扩充分配运算符+=
调用就地方法__iadd__
对于列表sq_inplace_concat
实现为l
,解释了列表和元组的串联。引自PEP 203: Augmented Assignments:
存在一些特殊的外壳来解释+和*的情况,这对于序列具有特殊含义:对于+,序列连接,如果C类型定义sq_concat或sq_inplace_concat,则不会强制执行。
本质上,运算符表现为列表的extend()
函数,并通过使用以下可迭代(在本例中为元组)扩展它来就地修改列表。
l=[]
l+=8, ## eventually implies l.extend((8,))
print(l) ## [8]
list.extend()函数只接受迭代的事实解释了错误TypeError: 'int' object is not iterable
。