python元组和序列

元组(Tuples) 和序列(Sequences 

我们知道链表和字符串有很多通用的属性,例如索引和切片操作。它们是序列类型中的两种。因Python是一个在不停进化的语言,也可以加入其它的序列类型,这里有另一种标准序列类型:元组。

一个元组由数个逗号分隔的值组成,例如:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

如你所见,元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可能有或没有括号都可以,不过经常括号都是必须的(如果元组是一个更大的表达式的一部分)。

元组有很多用途。例如(x, y)坐标点,数据库中的员工记录等等。元组就像字符串,不可改变:不能给元组的一个独立的元素赋值(尽管你可以通过联接和切片来模仿)。也可以通过包含可变对象来创建元组,例如链表。

一个特殊的问题是构造包含零个或一个元素的元组:为了适应这种情况,语法上有一些额外的改变。一对空的括号可以创建空元组;要创建一个单元素元组可以在值后面跟一个逗号(在括号中放入一个单值是不够的,否则则是一根字符串而已)。丑陋,但是有效。例如:

>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)

语句 t = 12345, 54321, 'hello!' 元组封装(sequence packing的一个例子:值 12345 54321 和 'hello!' 被封装进元组。其逆操作可能是这样:

>>> x, y, z = t

这个调用被称为序列拆封非常合适。序列拆封要求左侧的变量数目与序列的元素个数相同。要注意的是可变参数(multiple assignment

)其实只是元组封装和序列拆封的一个结合!

这里有一点不对称:封装多重参数通常会创建一个元组,而拆封操作可以作用于任何序列。

原文地址:https://www.cnblogs.com/youxin/p/3059702.html