05Python元组tuple的个性

时间:2022-07-23
本文章向大家介绍05Python元组tuple的个性,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

概述

前面文章讲了Python数据类型中内置的序列型的数据结构:元组 tuple 和列表 list 。

它俩的用法、写法都极为相似,要说起它们的区别无非就是list 是可变的对象,元组 tuple 是不可变的对象!由于 tuple 不可变,所以使用 tuple 可以使代码更安全!

那,我们已经有了List,为什么还要一个Tuple,我们直接const 一个不可变的List不行么?这篇文章我们尝试理解Python为什么费事巴拉的弄个Tuple出来。

tuple一旦创建就被保护起来

元组Tuple

我们以前读书的时候学Java、C++、C# 等,都是没有Tuple这个东东的。

但是由于元组的灵活和便捷性,最后这些编程语言也都纷纷加上了。很多比Python晚出生的编程语言 Python、Scala 等,一开始就内置了元组类型。

函数返回多个值

之所以元组这么受欢迎,其实最关键的一点是它的语法的灵活和便捷性,提高了编程体验。其中最大的一个特性就是使函数可以返回多个值,这个特性很常用。

以前写C语言函数的时候,我们没有直接的办法在函数中返回多个值,甚至为了返回一个数组都需要定义一个结构体。

但是,Python中tuple的出现,使得Python函数返回多个值成为可能。例如:

def get_info():  #定义
   name = "gao"
   age = 30
   return name, age
name, age = get_info() #调用

上面的函数和Tuple有什么关系呢?其实Python函数返回的值本质上还是一个单值,继续看下面代码:

多值返回函数其本质依然是单值返回函数

从get_info函数的返回的类型type可以看出,这里返回值就是一个tuple!由于在语法上,返回一个tuple是可以省略括号的,而多个变量可以同时接收一个tuple,按位置赋给对应的值。

所以,Python的函数返回多值时,其实就是返回一个tuple。你看,Tuple让复杂的问题边简单了。

tuple 不可变的好处

相对于 list 而言,tuple 是不可变的,这使得它可以作为 dict 的 key,或者扔进 set 里,而 list 则不行。

tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提升:创建 tuple 比 list 要快,存储空间比 list 占用更小。所以就出现了“能用 tuple 的地方就不用 list”的说法。

多线程并发的时候,tuple 是不需要加锁的,不用担心安全问题,编写也简单多了。

元组真的不可改么?

1、创建和访问一个元组

如果创建一个空元组,直接使用小括号即可;

如果要创建的元组中只有一个元素,要在它的后面加上一个逗号‘,’。如下所示:

>>> temp = () #注意这里是小括号,不是0
>>> type(temp)
<type 'tuple'>
>>> temp = (1,)
>>> type(temp)
<type 'tuple'>
>>> temp = (1)
>>> type(temp)
<type 'int'>
>>> 8 * (8) #此处小括号中的8被当成int型
64
>>> 8 * (8,)
(8, 8, 8, 8, 8, 8, 8, 8)

元组里只有一个元素的时候,逗号(,)非常重要,否则就不再是tuple了。比如:

2、更新元组

直接在同一个元组上更新是不可行的,但是可以通过拷贝现有的元组片段构造一个新的元组的方式解决。

通过分片的方法让元组拆分成两部分,然后再使用连接操作符(+)合并成一个新元组,最后将原来的变量名(temp)指向连接好的新元组。在这里就要注意了,逗号是必须的,小括号也是必须的!如下:

从上面的代码看,其实我们不是更改了temp,而是把temp从中间切开杀死之后,用它分解后的肢体再在中间插入一个新的tuple制作出一个新的tuple temp。此时的temp已经不再是原来的temp了,tuple宁死不改。

3.删除元组中的元素

对于元组是不可变的原则来说,单独删除一个元素是不可能的,通用我们也可以利用切片的方式更新元组,间接的删除一个元素。如下:

在日常中很少用del去删除整个元组,因为Python的回收机制会在这个元组不再被使用的时候自动删除。但是,你用"del temp"这种写法删除tuple也是可以的。

4.元组中也可以用in和not in

成员操作符 in 和 not in 也可以直接应用在元组上,这跟列表是一样的。如下:

注意:本文中使用的Python版本是2.7

_

参考:

https://blog.csdn.net/ruanxingzi123/article/details/83184909

https://www.runoob.com/python/att-tuple-tuple.html