![机械工程师Python编程:入门、实战与进阶](https://wfqqreader-1252317822.image.myqcloud.com/cover/439/51753439/b_51753439.jpg)
1.5.2 元组
元组(tuple)中的元素不可变且有序。不可变(Immutable)是指元组一旦被创建,就无法更改。元组中的每个元素都有索引,从零开始递增。Python中的计数总是从零开始。
当我们在代码内部传递有序的数据集,且不希望该集合发生任何更改时,元组是很好的选择。例如,在以下代码中:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_01.jpg?sign=1734571799-0jMF36rqndfG87952pmMV7vOJQRBbDcC-0-25d4725227baa86159ac16aa016e9e1b)
你可以放心,some_function不会以任何方式更改names元组。相比之下,如果你使用如下集合:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_02.jpg?sign=1734571799-AGeBqZvnA58ldOHawFaImxyLRb76GQ1c-0-9e704a92a45805149205d268a0ebc5c4)
没有什么能阻止some_function给传递的names添加元素或从传递的names删除元素,因此你需要检查函数的代码,以确定代码是否对元素进行修改。
注意:我们稍后将看到,无论何种情况,函数都不应该修改它们的形参[1]。我们在本书中编写的函数永远不会修改它们的输入形参。然而,你可能会使用其他不遵循这个规则的开发者所编写的函数,因此你需要检查这些函数是否有这类副作用。
元组使用括号来定义,内部元素以逗号分隔。如下是使用字面量语法定义的、包含我的名称和年龄的元组:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_03.jpg?sign=1734571799-GLzXzkhzA9PQUp6YK1suNeskMn446p0O-0-41c2ad70f1cefe5430a20dc362f20984)
如果想创建只有一个元素的元组,我们需要在元素后面添加逗号:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_04.jpg?sign=1734571799-p1vOzsyCsbfpeoUrLtg9irvBiDuPqmqa-0-4691065ce783ad5ae14062fa1ccbef20)
创建元组也可以使用tuple函数,参数是列表格式的元素集:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_05.jpg?sign=1734571799-XNfg4yfvJDCzXw7cOOwi4sMyyClxeOVu-0-d9bd572731af5ca7023731f51514eff3)
使用全局函数len可以获取元组中元素的数量:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_06.jpg?sign=1734571799-PxQXqV3W77K98hZCqNCrRHAB7T7aIQ6J-0-a09ec5d8908c0205f761a8487b4e66ae)
还可以使用count方法计算某元素在元组中出现的次数:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_07.jpg?sign=1734571799-WSxsofGbOuBaX7hdDeSq1CYycB9R9z8S-0-754a15176bc8604cb08e9f645ff4fb59)
使用index方法可以得到某元素第一次出现时的索引:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/40_08.jpg?sign=1734571799-8BHzjX3LY4PbGHCWOrEZDQ1JGIi7TTVk-0-70c2d2e3b092f9ac46dc676f17bf1d7d)
在上例中,我们寻找字符串“Alvaro”的索引,“Alvaro”出现了两次:在索引1和5处。index方法会输出第一个出现的索引,在本例中即为1。
in运算符可用于检查元组中是否存在某元素:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/41_01.jpg?sign=1734571799-3O3FVy1QSLd3uWbKWK3er966gQAOlzrO-0-028dcedcef69163780449ed7d2ed91a7)
元组可以与数字相乘,这个特殊的操作会生成一个新元组,其元素是原元组元素的重复,重复次数与乘数相同:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/41_02.jpg?sign=1734571799-r36K2C5QEQ5QKz9O7hcdAdiQvXUqoePz-0-b10fb671b3378454c60954f83b4b677d)
使用for循环可以遍历元组的元素:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/41_03.jpg?sign=1734571799-FJSxEHIOjKTNO2XM9LdhKfmlXHeKrFAA-0-ba79b38f0f69a70177007c315e4f6017)
使用Python内置的enumerate函数,我们可以遍历元组中的元素及其索引:
![](https://epubservercos.yuewen.com/AE06E7/30549606304263306/epubprivate/OEBPS/Images/41_04.jpg?sign=1734571799-94Nieh70NJdr6oIkH71sSYiD0IPXJ8dF-0-00853526856090a3419e0880087129b4)