本文主要是介绍重新认识元组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
元组的一些小的应用
- 元组
- 元组的应用场景少的可怜吗?
- 应用
- 位置不变
- 位置变化
- 注意事项
- tuple 性能
元组
元组也就是python里的tuple,我相信很多人和我一样,就是在刚开始学习python的时候,仅仅只是把元组当作一个不可变列表,一个不可改变的列表,牺牲了自由度,在很多的场景中并不适用,故而一般很少用到元组。
元组的应用场景少的可怜吗?
我想很多人都会和我一样,回答:yes
应用
位置不变
当然是记录一些常量,记录这些东西的时候,我们一般不在意数值在元组中的位置。
version = ("v1", "v2")
位置变化
假设我们对元组中的数值位置,非常在意呢,因为这可能会影响到我们业务,例如我们得到一行数据:
name,age,sex = ("宇宙无敌暴龙战士", 13, "man")print("%s/%d/%s" % ("宇宙无敌暴龙战士", 13, "man"))
通过name 我们可以得到用户的名字,这样的做法,好像list也能做(同数据类型情况下🤭),为什么非得用tuple?
首先,作为不可变的数组,元组非常适合用来存这种查询出来固定的数据,注意我后面加的print函数,这是我认为在实际体验中tuple优于list的原因, % 格式化运算符理解元组结构,把每一项当作不同的字段,特别适合一些日志记录。
上述的用法,利用的是tuple ==拆包(unpacking)==的特性,我们现在不深入拆包的原理,单单使用tuple这一特性,除了上述用法,我们还能干嘛?
name, *middle, sex = ("宇宙无敌暴龙战士", 13, "man")print(name, sex)
像上面这种用法,我们在日常开发中应该有不少用到的地方,这也是拆包带来的用法。
super_man = [("uzi", 18), ("pdd", 23), ("那个男人", 22), ("maya", 21)]for name, _ in super_man:print(name)
这也是一种拆包🐕。
而我们常常看到Python 解释器和标准库经常把元组当作不可变列表使用,这么做主要有两个好处。意图清晰,只要在源码中见到元组,你就知道它的长度永不可变(这是一种隐形的好处)。性能优越,长度相同的元组和列表,元组占用的内存更少,而且 Python 可对元组做些优化。
注意事项
不要在元组里放可变的项,比如list
record = ("宇宙无敌暴龙战士", 13, "man", [1,2,3,4])
tuple 性能
这是stack overflow中关于tuple 性能的高赞回答,个人觉得,直接引用是tuple明显优于list的一点,相比之下list把引用数组存储在别处,因为列表可能会变长,一旦超出分配空间,就需要重新分配引用数组来腾出空间,相反tuple是固定的,你永远可以在tuple的数组中直接找到引用。
tuple性能优于list的链接
这篇关于重新认识元组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!