Python - Tuple 怎么用,为什么有 tuple 这种设计?

背景

看到有同学很执着的用 tuple,想起自己刚学 python 时,也是很喜欢 tuple,为啥?因为以前从来没见过这种样子的数据 (1,2), 感觉很特别,用起来也挺好用 i,j=(1,2), 一下子就得到两个变量了;

而且如果函数返回值超过 1 个的话, 用 tuple 挺好,直接就返回了,解析起来也方便。

tuple 为啥这么好?是真的这么好吗?真的这么好,为啥比如 json 什么的很少用 tuple 呢?没有细想过。

探索

所以就挺想搞明白,为啥设计了 tuple,应该怎么用?

去官网查,找到why are there separate tuple and list data types,有点感觉了。

大致写一下理解:

tuplelist 很相似,但基本的用处还是不一样的。

tuple 的设计类似于 Pascal records 或 C structs(这两个都不熟悉。。。);

它是啥?

  • 一组相关联的数据的集合

    • 集合规模 小
  • 这些数据可以是不同类型
    • 但合起来是一个组合

一个比较典型的应用是,笛卡尔坐标系,(x,y,z) 表示一个物体的坐标。看起来是挺直观的,比 list,dict都直观。

还有一点, tupleimmutable 类型,就是说,一旦定义了 tuple, 它里面的数据就不能更改了。比如:

>>> a = (1,2)
>>> a[0]=3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a[0]
1

我定义了一个 tuple a, 我想更改它的第一个值,但是报错了 ‘tuple‘ object does not support item assignment, 这个错其实就是提示了, a 里面的值是不能更改了。

如果你想更改,那不如改为定义一个 list, 这个 list 就是 mutable 的,即可以任意更改里面的值,这个大家基本都熟悉常用的了。

小结

tuple 用起来比较爽的地方有几个,依我自己的感觉:

  • 组合(group)的感觉比较好,正如其设计的,tuple 就是将几个相关的组合起来代表某个事/物

    • 我的理解是,这个组合起来的事物,是有某个具体有意义的事物,比如笛卡尔坐标系
  • 解析的时候比较方便,比如如下,一行代码就可以获得两个变量了
>>> i , j = (1, 2)
>>> i
1
>>> j
2
  • 同样,设计一个函数,需要返回多个变量的时候,可以用 list, 但也可以用 tuple, 解析的时候就有了上面那条的便利。
  • 补充一点,因为 tupleimmutable 的,所以可以当做 字典(dict)的 key 来用,因为 字典的 key 是用到 hashtable 实现的, 是不能(该)变动的。
  • 还有啥?暂时没想到

那不太建议用 tuple 的地方感觉就比较重要了:

  • tuple 定义后,里面的值是不能改的,这个就很不方便了
  • 如果 tuple 里面的元素之间没有什么关联的话,用起来也缺失了实际设计的本质

参考

原文地址:https://www.cnblogs.com/learnbydoing/p/12112606.html

时间: 2024-10-26 16:01:29

Python - Tuple 怎么用,为什么有 tuple 这种设计?的相关文章

Python中内置数据类型list,tuple,dict,set的区别和用法

Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. (原链接:http://www.jb51.net/article/76339.htm) List 字面意思就是一个集合,在Python中List中的元素用中括号[]来表示,可以这样定义一个List: ? 1 L = [12, 'China', 19.998] 可以看到并不要求元素的类型都是一样的.当然也可以定

python基础II(list、tuple、简单程序结构)

创建list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ['Michael', 'Bob', 'Tracy'] ['Michael', 'Bob', 'Tracy'] list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的. 构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象.通常,我们

小白的python进阶历程------07.元组(tuple)

元组(tuple) 有序(有索引,定义和显示顺序是一致的).不可变.可重复.可以存放任何类型的数据(不可变的) 1).tuple的格式 tp1 = ("name","age",23,"height","address","job") tp1 = (name,job) = ["chen","IT"] tp1 = () tp1 = ("python",

[Python网络编程]浅析守护进程后台任务的设计与实现

在做基于B/S应用中,经常有需要后台运行任务的需求,最简单比如发送邮件.在一些如防火墙,WAF等项目中,前台只是为了展示内容与各种参数配置,后台守护进程才是重头戏.所以在防火墙配置页面中可能会经常看到调用cgi,但真正做事的一般并不是cgi,比如说执行关机命令,他们的逻辑如下: (ps:上图所说的前台界面包含通常web开发中的后端,不然也没有socket一说) 为什么要这么设计 你可能疑惑为什么要这么设计,我觉得理由如下: 首先有一点说明,像防火墙等基本上都运行在类Linux平台上 1.安全问题

Python的数据类型:list和tuple

今天开始认真的学习python. 1.list类型 list是python的一种数据类型,它是一种有序列表,可以随时添加和删除其中的元素. 1.1 list类型的特征 list类型内的成员类型可以相同,也可以不同: list类型的定义:list1=[member1,member2,member3,...]: 可以使用len()函数获取list类型的成员个数:例如:len(list1) 可以使用索引来访问list类型中的每个成员,索引下标从0开始.下标越界将出错.例如:list1[2] 如果要访问

python数据结构list,string,tuple,set,dictionary常用操作

1-列表list常用的一些方法如下: 上述的list.index(item),与string.find(item)类似 list与range快速生成list的方法: 1 >>>lst=list(range(10)) #lst=[0,1,2,3,4,5,6,7,8,9] 2 >>>list(range(5,10)) #[5,6,7,8,9] 3 >>>list(range(5,10,2)) #[5,7,9] 4 >>>list(rang

Python 学习笔记 0308 周二:tuple,list,dict的区别

dict{}是key和value的组合,key必须唯一.在没有value的时候,key也是唯一值. 因此 print sorted({1,4,23,45,334,1,2}) 之后是这样的结果: [1, 2, 4, 23, 45, 334] dict可以改变,有del,clear等方法. dict可以用作函数参数中的**kw--关键字参数 list[]是可以改变.可以重复的一组数 因此 print sorted([1,4,23,45,334,1,2]) 之后是这样的结果: [1, 1, 2, 4,

python初学day3 --(list,tuple,dict,set 内部功能简介)

list 内部方法汇总 1,def append(self, p_object): 对原列表添加元素 li = list((2,3,4,6,9,7)) li.append('a') print(li)                        结果:[2, 3, 4, 6, 9, 7, 'a'] 2,def clear(self):清除列表中的所有元素 li = list((2,3,4,6,9,7)) li.clear() print(li)                        

Python中几种数据类型list, tuple,dict,set的使用演示

还是直接上代码,看着代码运行,看函数介绍 # coding=utf-8 # 1 list-列表 的用法 students = [1,2,3] a = 5 classmates = [students*2,[1,1,1,1],[1,1,1,1]]#list的乘法是数组的线性扩大 classmates.append('test' ) #list的附加 classmates.extend(students) #迭代扩展list print(classmates.index('test',2)) #li

python笔记三(list、tuple、dict、set)

一.list list的增删改查 #增, classmates.append("nadech") #在末尾追加一个元素 classmates.insert(1,"aguilera") # 在索引值为1的位置插入 #删 classmates.pop() # 从末尾删掉一个元素 classmates.pop(1) # 从索引值为1的位置删掉元素 #改 classmates[1] = "aguilera" #查 classmates[1] #查看索引值