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,有点感觉了。
大致写一下理解:
tuple
和 list
很相似,但基本的用处还是不一样的。
tuple
的设计类似于 Pascal records 或 C structs(这两个都不熟悉。。。);
它是啥?
- 一组相关联的数据的集合
- 集合规模 小
- 这些数据可以是不同类型
- 但合起来是一个组合
一个比较典型的应用是,笛卡尔坐标系,(x,y,z)
表示一个物体的坐标。看起来是挺直观的,比 list
,dict
都直观。
还有一点, tuple
是 immutable
类型,就是说,一旦定义了 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
, 解析的时候就有了上面那条的便利。 - 补充一点,因为
tuple
是immutable
的,所以可以当做 字典(dict)的key
来用,因为 字典的key
是用到hashtable
实现的, 是不能(该)变动的。 - 还有啥?暂时没想到
那不太建议用 tuple
的地方感觉就比较重要了:
tuple
定义后,里面的值是不能改的,这个就很不方便了- 如果
tuple
里面的元素之间没有什么关联的话,用起来也缺失了实际设计的本质
参考
本文由博客一文多发平台 OpenWrite 发布!
Python - Tuple 怎么用,为什么有 tuple 这种设计?的更多相关文章
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- Python教程(2.6)——list和tuple简介
Python中内置的类型有list和tuple. List list类似于C/C++的数组,可以存储多个数字.例如你可能会需要存储一个班里所有人的名字.这时就可以用到list.list中存储的数据叫做 ...
- Python入门基础之list和tuple
Python之创建list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: > ...
- python基础之列表list元组tuple
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7041763.html python基础之列表list元组tuple 列表li ...
- 『Python基础-9』元祖 (tuple)
『Python基础-9』元祖 (tuple) 目录: 元祖的基本概念 创建元祖 将列表转化为元组 查询元组 更新元组 删除元组 1. 元祖的基本概念 元祖可以理解为,不可变的列表 元祖使用小括号括起所 ...
- python基本数据类型之元祖tuple
元祖tuple 是对列表的二次加工,书写格式为括号(),里面放元素 元组的一级元素不可被修改,且不能被增加和删除 一般写元组的时候,推荐在最后加入逗号, 能加则加 创建元组 ? 1 tu = (11 ...
- Python内置数据结构之元组tuple
1. Python序列之元组:不可修改的序列 元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能像列表式的增删改,只能查,切片,所以元组又叫只读列表. 元组用圆括号括起(这是通常采用的做法) ...
- Python:Base2(List和Tuple类型, 条件判断和循环,Dict和Set类型)
1.Python创建list: Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: &g ...
- python中的list()函数和tuple()函数
tuple函数:将一个序列作为参数,并把它转化为元组,如果参数是元组,将会原样返回: >>> tuple([1,2,3]) (1, 2, 3) >>> tuple( ...
- python笔记三(list、tuple)
一.list list的增删改查 #增, classmates.append("nadech") #在末尾追加一个元素 classmates.insert(1,"agui ...
随机推荐
- KiCad 5.1.3 尝鲜版已经有了
KiCad 5.1.3 尝鲜版已经有了 发现一个改动. 对调了对话框按钮的位置,和 Windows 习惯一样了.
- 2014年山东省第五届ACM大学生程序设计竞赛F题:Full Binary Tree
题目描述 In computer science, a binary tree is a tree data structure in which each node has at most two ...
- 《C程序设计语言》笔记(一)
一:导言 1:printf中的格式化字符串: %ld 按照long整型打印 %6d 按照十进制整数打印,至少6个字符宽,不够的 ...
- 2015 Objective-C 三大新特性
http://www.cocoachina.com/ios/20150617/12148.html Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的 ...
- jsp页面关建字查询出记录后,点下一页关键字会清空,怎么保持关键字不变而进行下一页操作?
解决方案一: 1 把关键字带回后台,从后台再次传入! 2 把关键字传入cookie,从cookie获取 3 把表格一栏放在iframe中,搜索时,刷新iframe即可 解决方案二: 用2个div分开就 ...
- SuperSocket进程级别隔离
在 SuperSocket 1.5 中, 我们增加了 AppDomain 级别隔离的功能,让你可以运行多个服务器实例在相互独立的 AppDomain 上. 此功能提供了较高级别的安全性和资源的隔离,并 ...
- 深入java面向对象四:Java 内部类种类及使用解析(转)
内部类Inner Class 将相关的类组织在一起,从而降低了命名空间的混乱. 一个内部类可以定义在另一个类里,可以定义在函数里,甚至可以作为一个表达式的一部分. Java中的内部类共分为四种: 静态 ...
- 深入java面向对象二:final关键字
文章内容源于对<疯狂java讲义>及<疯狂Java:突破程序员基本功的16课>学习和总结. 一. final成员变量 final 修饰变量时,表示该变量一旦获取了值就不可以改变 ...
- Python--day26--反射
反射对象的属性:(非常重要) getattr(类名,‘属性名’):获得属性值 使用getattr的好处:需要查看某个属性值的时候,不用再在代码中用if else elif 去判断输入(input函数) ...
- HDU 1286
欧拉函数 φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数.φ(1)=1 ...