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 裏面的元素之間沒有什麼關聯的話,用起來也缺失了實際設計的本質

參考

相關文章
相關標籤/搜索