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
裡面的元素之間沒有什麼關聯的話,用起來也缺失了實際設計的本質
參考
- why are there separate tuple and list data types
why must dictionary keys be immutable?
本文由部落格一文多發平臺 OpenWrite 釋出!