Python - Tuple 怎么用,为什么有 tuple 这种设计?
2019-12-28 18:19
1161 查看
背景
看到有同学很执着的用
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
我定义了一个
tuplea, 我想更改它的第一个值,但是报错了
'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
里面的元素之间没有什么关联的话,用起来也缺失了实际设计的本质
参考
相关文章推荐
- 为什么你还不懂得怎么使用Python协程
- 为什么支付宝使用用户体验欠佳的安全控件,而国外 Paypal、Google Checkout 都没有这种的设计?
- 有些网页,为什么不能通过在浏览器总另存为,进行保存?这种的,应该怎么保存?
- Python中的Range函数为什么要设计成左闭右开区间?
- 我是一个java菜菜蔡鸟,用java编写计算器,为什么按c却是清除又显示c,这种情况下怎么做,在线等,不急,,还有一些算法什么的也不会做?请大神教教我。谢谢了
- 对MVC的理解?为什么要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其他的OC设计模式或别的设计模式吗
- 为什么好多人想学Python 怎么快速学会高端技术
- 这种题目怎么做 为什么 谢谢 给个例题 "正方形的周长C与它的边长"中的2个变量是否成正比例
- 为什么Python不用设计模式?
- 为什么 Java 只有值传递,但 C# 既有值传递,又有引用传递,这种语言设计有哪些好处?
- 为什么Python中没有"a++"这种写法
- 为什么python设计时要有__init__.py才视为包
- Python 是怎么火起来的? 转载 2018年01月12日 00:00:00 133 图:Python 之父 Guido 正在设计 Python 语言,结果家里突然潜入一条大蟒蛇,一番激烈斗争,大
- python 导入模块的坑。为什么整个项目能运行,单独运行某个文件模块就报错?多层目录不同文件夹怎么导入?
- 为什么有些人觉得项目经理类似于打杂的?怎么解释这种现象?
- 为什么 Java 只有值传递,但 C# 既有值传递,又有引用传递,这种语言设计有哪些好处?
- 为什么支付宝使用用户体验欠佳的安全控件,而国外 Paypal、Google Checkout 都没有这种的设计?
- 不用Python,怎么实现大数据爬虫项目?
- 前端读者 | 为什么页面跟设计稿差距这么大?是啊!为毛啊?
- [Python入门]Chapter4 接口设计