使用*的Python元组复制



这很好而且直接:

>>> ('a',) * 3
('a', 'a', 'a')

但我对tuple进行了一点实验,结果发现:

>>> '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', * ('b', 'c')

上有两件主要的事情

  1. 'a',创建一个包含单个元素'a'的元组
  2. * ('b', 'c')使用扩展的可迭代拆包(PEP 3132(

因此,#2的结果用于从#1继续元组定义。为了显示一个更直观的例子,这是相同的想法

>>> 'a', *range(5)
('a', 0, 1, 2, 3, 4) 

最新更新