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

背景

看到有同窗很执着的用 tuple,想起本身刚学 python 时,也是很喜欢 tuple,为啥?由于之前历来没见过这种样子的数据 (1,2), 感受很特别,用起来也挺好用 i,j=(1,2), 一会儿就获得两个变量了;html

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

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

探索

因此就挺想搞明白,为啥设计了 tuple,应该怎么用?函数

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

大体写一下理解:code

tuplelist 很类似,但基本的用处仍是不同的。htm

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

它是啥?博客

  • 一组相关联的数据的集合
    • 集合规模 小
  • 这些数据能够是不一样类型
    • 但合起来是一个组合

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

还有一点, 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 里面的元素之间没有什么关联的话,用起来也缺失了实际设计的本质

参考

相关文章
相关标签/搜索