
1.5.2 元组
元组(tuple)中的元素不可变且有序。不可变(Immutable)是指元组一旦被创建,就无法更改。元组中的每个元素都有索引,从零开始递增。Python中的计数总是从零开始。
当我们在代码内部传递有序的数据集,且不希望该集合发生任何更改时,元组是很好的选择。例如,在以下代码中:

你可以放心,some_function不会以任何方式更改names元组。相比之下,如果你使用如下集合:

没有什么能阻止some_function给传递的names添加元素或从传递的names删除元素,因此你需要检查函数的代码,以确定代码是否对元素进行修改。
注意:我们稍后将看到,无论何种情况,函数都不应该修改它们的形参[1]。我们在本书中编写的函数永远不会修改它们的输入形参。然而,你可能会使用其他不遵循这个规则的开发者所编写的函数,因此你需要检查这些函数是否有这类副作用。
元组使用括号来定义,内部元素以逗号分隔。如下是使用字面量语法定义的、包含我的名称和年龄的元组:

如果想创建只有一个元素的元组,我们需要在元素后面添加逗号:

创建元组也可以使用tuple函数,参数是列表格式的元素集:

使用全局函数len可以获取元组中元素的数量:

还可以使用count方法计算某元素在元组中出现的次数:

使用index方法可以得到某元素第一次出现时的索引:

在上例中,我们寻找字符串“Alvaro”的索引,“Alvaro”出现了两次:在索引1和5处。index方法会输出第一个出现的索引,在本例中即为1。
in运算符可用于检查元组中是否存在某元素:

元组可以与数字相乘,这个特殊的操作会生成一个新元组,其元素是原元组元素的重复,重复次数与乘数相同:

使用for循环可以遍历元组的元素:

使用Python内置的enumerate函数,我们可以遍历元组中的元素及其索引:
