Python學著玩 1 元組

2021-08-11 04:34:47 字數 2680 閱讀 9195

例如

tuple= (1, 2) #宣告元組

list= [1, 2] #宣告列表

說到這裡我突然想到乙個事情,像元組列表這些字面量的宣告無非就是語法糖,但是為什麼在一些靜態語言中卻看不到這樣的設計呢?

例如 kotlin宣告乙個list

val list=listof(1,2,3) #宣告乙個列表
後來想了想,應該還是因為動態語言和靜態語言對效率上的要求不同導致他們的語法設計理念有差異。

就像kotlin的listof,雖然返回的是乙個list介面,但是深入原始碼裡發現他返回是乙個arraylist,即底層為array的list,而如果在某些情況下覺得底層為鍊錶的list效率更高,那麼就可以構造這樣的list。

但是python這類動態語言,似乎就隱藏了實際的底層實現差異,不太在乎效率的問題。而更關注於功能的實現,我們並不知道他字面量返回的資料結構底層是由什麼實現的,也不用去關心。

當然兩者都可以做到同樣的事情,python也能構造以煉表為底層的list來使用,只是方便與否的問題,使用python時,我相信大多數人都會傾向於使用有字面量語法糖的那幾個資料結構,而不是仔細的思考什麼資料結構在當前任務下效率最高。

而在靜態語言下,似乎對選取哪個資料結構更高的思考會更多。

接下來繼續對python元組本身的討論

這玩意沒啥好說的,就是語法糖,包了一組資料,然後可以快速的在復合資料和單個資料之間轉化,也可以變相實現函式多返回值,還是很方便的。

最近很多新語言也有了,不過名詞一直沒法統一很蛋疼。

>>> lax_coordinates = (33.9425, -118.408056) #宣告元組

>>> latitude, longitude = lax_coordinates # 元組拆包

恩。。因為元組就是乙個語法糖,所以有時候元組本身作為中間變數也可以省掉,

就可以完成如下的轉換

#有中間變數的情況

tmp=(a,b)

b,a=tmp

#省略中間變數的情況

b, a = a, b

#正常情況下

divmod(20, 8)

#使用元組的情況下

#先宣告乙個元組

t = (20, 8)

#使用*運算子展開

divmod(*t)

a, b, *rest = range(5) #結果分別是0, 1, [2, 3, 4]
可以看到僅僅是一些語法糖就可以讓生活變得更加美好~

還有一些

接受表示式的元組可以是巢狀式的,例如 (a, b, (c, d))。只要這個

接受元組的巢狀結構符合表示式本身的巢狀結構,python 就可以作出正

確的對應

metro_areas = [

('tokyo','jp',36.933,(35.689722,139.691667)),

('delhi ncr', 'in', 21.935, (28.613889, 77.208889)),

('mexico city', 'mx', 20.142, (19.433333, -99.133333)),

('new york-newark', 'us', 20.104, (40.808611, -74.020386)),

('sao paulo', 'br', 19.649, (-23.547778, -46.635833)),

]for name, cc, pop, (latitude, longitude) in metro_areas: #

if longitude <= 0: #

print(fmt.format(name, latitude, longitude))

輸出結果

mexico city | 19.4333 | -99.1333

new york-newark | 40.8086 | -74.0204

sao paul | -23.5478 | -46.6358

具名元組就是快速構成乙個類,然後通過這個類來生成元組,從而就可以對元組有一些限制,還可以用一些語法特性例如命名引數來更好的構建元組。

>>> 

from collections import namedtuple

>>> city = namedtuple('city', 'name country population coordinates')

>>> tokyo = city('tokyo', 'jp', 36.933, (35.689722, 139.691667))

>>> tokyo

city(name='tokyo', country='jp', population=36.933, coordinates=(35.689722,

139.691667))

>>> tokyo.population

36.933

>>> tokyo.coordinates

(35.689722, 139.691667)

>>> tokyo[1]

'jp'

這個應該每本入門書第乙個提的元組特性就是這個了吧,我就不重複了,總之最重要的就是沒有可變的物件***,傳入函式後不用怕被錯誤更改。

python3元組 Python3元組

python的元組與列表相似,不同之處在於元組的元素不能修改 元組使用小括號,列表使用方括號 元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。建立空元組 tup1 tup2 1,元組只包含乙個元素時,需要在元素後面新增逗號,否則括號會被當作運算子使用 元組與字串類似,下標索引從0開始,可...

TCP IP的四元組 五元組 七元組

四元組是 源ip位址 目的ip位址 源埠 目的埠 五元組是 源ip位址 目的ip位址 協議號 源埠 目的埠 七元組是 源ip位址 目的ip位址 協議號 源埠 目的埠,服務型別以及介面索引 協議號 ip是網路層協議,ip頭中的協議號用來說明ip報文中承載的是哪種協議,協議號標識上層是什麼協議 一般是傳...

Python學習 4 元組

1.在python中有元組,列表,字串三種序列 在上一節我們介紹了字串這種序列,下面我們介紹下有關序列的操作,注意這是序列的有關操作,也就是說元組,列表,字串都具有以下操作.str1 abcde str2 12345 print len str1 求序列長度 print str1 str2 連線兩個...