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開始。列表的修改上,我...