龙空技术网

图说Python系列之Tuple你应该知道的3件事

编码大棚 212

前言:

当前看官们对“python中tuple的作用”大概比较重视,同学们都想要分析一些“python中tuple的作用”的相关资讯。那么小编也在网络上网罗了一些有关“python中tuple的作用””的相关资讯,希望朋友们能喜欢,我们一起来了解一下吧!

Python ltuple说好list的备胎呢

Tuple是常用的第二种可迭代容器,其功能类似于list, 但tuple是不可变数据结构, 那么该tuple又有哪些需要我们思考的呢, 让我们一起去看看tuple不可变特性带来的思考

不可变对象

可变与不可变是指的具体的数据,而不是代码里面的变量名称, 比如

可以看到这个叫t的变量,其实已经不是罪开始的那个t了,虽然它还叫这个名字, 但已经不是最开始开始的那个它了

在静态语言中, 比如go对于常量的不可变实际上是通过在编译器编译连接的过程中将内存分为一个个区域,同时每个区域都会有对应的权限,这样在外面想要操作只读区域的时候, 操作系统就会直接禁止我们的操作,从而实现不可变

不可变对象中的可变对象

在Python这种脚本语言中, 程序的运行和内存布局都是由解释器动态进行,就无法利用静态语言的那种方法,那他是怎么做的呢?

所谓的不可变对象其实就转换为一种行为的拦截方式,当我们要对不可变对象进行操作的时候, python解释器会进行一些操作的权限检查,对于不可变对象一些修改操作,是不允许的,但对于可变对象,却不会有任何影响,毕竟对象千千万,解释器也没必要去hack所有的对象关联关系

有个很经典的面试题就是Tuple里面包含一个list, 如果对list操作的结果是什么,让我们一起看下

我们会发现当我们通过tuple来直接进行数据操作的时候, 会提示我们TypeError, 但我们直接操作数据却可以其实就是我们说的不可变的实现,其实是解释器对数据行为的拦截,而不是操作系统内存级别的权限验证

作为函数返回值的tuple

在fp函数中强调不可变性,给定一个函数和给定参数总会得到相同的输出, 同理返回值作为函数执行的结果,也是不允许改变的,下面掩饰了个购物车统计购物车物品和价格计算的例子,最终使用一个tuple作为返回值

可Hash作为字典key

list是一个可变数据结构,所以在类似dict和set需要根据hash计算的时候,就无法进行计算,而tuple是不可变数据结构,在这种需要hash场景,就可以用于代替list

在IP定位通常给定一个经纬度都会定位到一个具体的城市,其中经度和纬度是一对组合,二者动一可能就差别十万八千里,我们使用tuple来进行存储经纬度,使用字典存储经纬度同城市的映射关系

Tuple的两个API

Tuple 没啥多余的api,就只有count统计元素的个数,没有就返回0, index获取对应元素的

Tuple一图胜千言

通过本文我们了解了Tuple的不可变特性、作为函数返回值、字典Hash三个要点,希望能对大家有所帮助。

通过欢迎各位pythoner兄弟交流, 希望结实更多的Pythoner

标签: #python中tuple的作用