Python中元组*运算符的特殊拼接用法及疑问解析
关于Python元组中*运算符的疑问
先看符合预期的元组乘法操作:
>>> ('a',) * 3 ('a', 'a', 'a')
但测试元组操作时遇到了两种特殊情况:
>>> 'a', * ('b', 'c') ('a', 'b', 'c') >>> ('a',) * ('b', 'c') Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> ('a',) * ('b', 'c') TypeError: can't multiply sequence by non-int of type 'tuple'
为什么语句'a', *('b', 'c')中的*运算符能实现元组拼接?
解答
这里的*和元组乘法里的*是完全不同的语法:
- 元组乘法
('a',)*3中的*是二元乘法运算符,要求右侧必须是整数,作用是将元组重复指定整数次数。 - 而
'a', *('b', 'c')中的*是可迭代对象解包运算符,属于一元运算符,作用是把括号内的可迭代对象(此处为元组('b','c'))的元素逐个“展开”,直接融入当前的元组字面量中。这个写法等价于('a',) + ('b', 'c'),本质是元组拼接,和乘法没有关系。
这种解包语法的适用范围很广,除了元组,还能用于列表、集合等可迭代对象的字面量构建,比如[1, *[2, 3]]会生成列表[1, 2, 3],核心逻辑都是将可迭代对象的元素拆解后嵌入目标容器。
内容的提问来源于stack exchange,提问作者user20285111
相关产品推荐
相关产品推荐

