天天看點

更安全的元組-Python基礎前傳(8)(一)設計元組的意義(二)能用元組就不用清單(三)元組的陷阱

18世紀上半葉傑出的啟蒙思想家孟德斯鸠在《論法的精神》提到:

“一切有權力的人都容易濫用權力,這是萬古不易的一條經驗。有權力的人使用權力一直到遇有界限的地方方才休止。是以,要防止濫用權力,就必須以權力限制權力。”

上次分享,jacky分享了清單,由于清單太過強大,Python的作者覺得這樣似乎不妥,于是發明的清單的”表弟”-元組;

文:朱元祿(jacky)

(一)設計元組的意義

  • 元組(tuple)和清單(list)非常類似,但是元組一旦初始化就不能修改,比如同樣是列出名字:>>> name = (‘jacky’, ‘zhuyuanlu’, ‘andy’),現在,name這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他擷取元素的方法和list是一樣的,你可以正常地使用name[0],name[-1],但不能指派成另外的元素;或者說,jacky說清單有增删改查四個功能,元組不允許修改,那元組的功能就隻有查,沒有增删改,這樣把思路捋清就非常簡單了;

(二)能用元組就不用清單

  • 不可變的tuple有什麼意義?因為tuple不可變,是以代碼更安全。如果可能,能用tuple代替list就盡量用tuple。

(三)元組的陷阱

  • 當你定義一個tuple時,在定義的時候,tuple的元素就必須被确定下來,比如:
>>> t = (1, 2)>>> t
(1, 2)
如果要定義一個空的tuple,可以寫成():>>> t = ()>>> t
()
但是,要定義一個隻有1個元素的tuple,如果你這麼定義:>>> t = (1)>>> t1定義的不是tuple,是1這個數!這是因為括号()既可以表示tuple,又可以表示數學公式中的小括号,這就産生了歧義,是以,Python規定,這種情況下,按小括号進行計算,計算結果自然是1。

是以,隻有1個元素的tuple定義時必須加一個逗号,,來消除歧義:>>> t = (1,)>>> t
(1,)
Python在顯示隻有1個元素的tuple時,也會加一個逗号,,以免你誤解成數學計算意義上的括号。           
  • 咦,元組的功能沒說呢?前面已經說過元組是更安全的清單,那麼清單查的操作,元組都有,清單查的操作都有什麼呢?請參見上回《5分鐘記住清單的使用功能-Python基礎前傳(7)》