python進一 Python高階一

2021-10-19 03:50:30 字數 1617 閱讀 4113

python 資料型別

最近,我在看《流暢的python》這本書。本書比較適合python的高階過程閱讀。現在來總結一下本書第一章的內容。

書的第一章主要介紹了python 的資料型別,幫助你更好的理解為什麼python這樣設計,以及這樣設計的優點。開篇作者就講出了python語言的乙個良好品質:一致性。一致性使得python語言可以輕鬆上手,而一致性的乙個明顯體現就是python的魔法方法。例如 __getitem__ 方法。

下面構建了乙個animal類,類中重寫了object類的的__getitem__和__len__方法:

class animal:

def __init__(self, animal_list):

self.animals_name = animal_list

def __getitem__(self,index):

return self.animals_name[index]

def __len__(self):

return len(self.animals_name)

animals = animal(["dog", "cat", "fish"])

for animal in animals:

print(animal)

print(animals[0:2])

print(len(animals))

__getitem__方法使得animal物件獲得了一般列表具有的取數操作,而且支援切片操作。__len__方法使得可以使用len()得到物件的長度。因此你不必記住不同物件的獲得長度的方法,只需要重寫__len__方法,使用者變可以通過len()獲取指定物件的長度。

python還有許多其他的魔法方法,下面自定義了乙個向量類:

class vector():

def __init__(self,x,y):

self.x = x

self.y = y

def __repr__(self):

return "vector(,)".format(self.x,self.y)

def __abs__(self):

return (self.x **2 + self.y **2)**(1/2)

def __bool__(self):

return bool(abs(self))

def __add__(self, other):

x = self.x + other.x

y = self.y + other.y

return vector(x, y)

def __mul__(self, scalar):

return vector(self.x * scalar, self.y * scalar)

該類實現了向量的加減乘除還有列印向量等等。__repr__當print函式呼叫該物件時會執行這個方法。他可以把乙個物件用字串的形式表達出來以便辨認。

__repr__ 和__str__的區別是,後者是在str()函式被使用,或是在用print函式列印乙個物件的時候才被呼叫的,並且他返回的字串對終端使用者更加友好。前者方便我們除錯和記錄日誌,後者則是給終端使用者看的。

通過實現特殊方法,自定義的資料型別可以表現的跟內建型別一樣,從而可以寫出更具代表性的**。

Redis高可用演進(一)

最近整理redis,對sentinel有了更深入的理解,特地總結如下 1.主從redis 主從redis實際上是一種主備模式,即主redis宕機後,可以切換從redis繼續提供服務。缺點 1.人為關注master是否宕機 2.無法完成自動切換主從 3.從節點的功能未被充分利用 主從模式 為了解決上述...

python異常進一步學習

一 獲取異常資訊格式 try 1。2。3。excepty 異常 as 變數名 4。注意 變數名中儲存的是異常資訊,可以用print列印出來 try print 1 0 except zerodivisionerror as e print 捕獲到了異.print e 變數名中儲存的是異常資訊。二 捕...

python列表從低到高 Python列表高階

在 python 中,列表是一種有序的集合,可以儲存 0 到多個不同類似的元素。定義乙個列表,我們需要用中括號把裡面的元素包裹起來,並且用 英文逗號分隔。在列表元素的查詢上,我們可以通過索引來獲取我們想要的元素。列表的索引分為正向索引和反向索引。正向索引從0開始,反向索引從 1開始。列表的修改上,我...