在觸發某些條件的情況下回自動呼叫的函式,以雙下劃線開頭和結尾,例如__iter__
,__getitem__
class
company
(object):
def__init__
(self, employee_list)
: self.employee_list = employee_list ①
def__getitem__
(self, item)
: ②
return self.employee_list[item]
company = company(
['tom'
,'ary'
,'jack'])
for em in company: ③
print
(em)
① 例項的時候接受引數
② 實現__getiter__
魔法方法,實現此方法的物件是乙個序列,每次被迭代item就會以0, 1, 2等去取屬性裡面 的值,直到丟擲異常位置
③ for 迴圈背後實際上是首先做的事情是對in 後面的物件進行iter,若有迭代器,對迭代器進行迭代,否則呼叫__getitem__
方法
魔法函式實際上就是叫做資料模型,因為網上都叫魔法函式,叫多就成自然了
class
company
(object):
def__init__
(self, employee_list)
: self.employee_list = employee_list
def__getitem__
(self, item)
:return self.employee_list[item]
def__len__
(self)
:return
len(self.employee_list)
company = company(
['tom'
,'ary'
,'jack'])
for em in company:
# 實現了迭代的方法
print
(em)
print
(company[:2
])# 實現了序列的方法
print
(len
(company)
)# 實現了 len 的方法--
----
----
----
----
----
----
----
----
----
--tomary
jack
['tom'
,'ary'
]3
python的魔法函式會對**的執行產生影響,在某些觸發的情況下能自動在背後隱式呼叫,實現乙個__len__
就能夠對例項實現len()的方法,實現__getitem__
方法就能被for迴圈和切片引用
class
company
(object):
def__init__
(self, employee_list)
: self.employee = employee_list
def__repr__
(self)
:"""
除錯專用的方法,在直譯器裡面生效
"""return
'employee : {}'
.format
(self.employee)
def__str__
(self)
:"""
使用print會自動呼叫這個方法
:return:
"""return
'我是print列印出來的'
c = company(
['jack'
,'jan'
,'meric'])
print
(c)c..
.我是print列印出來的
employee :
['jack'
,'jan'
,'meric'
]
__repr__
對開發者友好,能夠在互動式模式下輸出資訊
__str__
對使用者友好,在例項被列印時被呼叫
len()
函式內部有優化,效能非常高,len(乙個內建型別),一下子就能獲取長度,因為內部c語言在建立資料型別的時候預設維護資料型別的長度,呼叫的時候直接是取值的,效率高
實現對應資料型別的魔法函式就能夠變成對飲的資料型別,例如乙個類實現__getitem__
魔法函式,那個他就是乙個序列型別 Python深度學習 魔法函式2
對於魔法函式 repr 來說,他是可以把乙個物件用字串表達出來,以便於更好的區分,對於 str 來說,它也是返回字串,只是對於終端使用者更友好一些。class person def init self,name,hobbys self.name name self.hobbys hobbys def...
Python 高階函式(2)
sorted 函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序。key指定的函式將作用於list的每乙個元素上,並根據key函式返回的結果進行排序。假設我們用一組tuple表示學生名字和成績 l bob 75 adam 92 bart 66 lisa 88 請用sorted 對上述...
函式式程式設計(2) 高階函式
1 什麼是程式設計正規化 2 程式設計函式與數學函式的關係。上篇文章介紹了函式式程式設計屬於宣告式程式設計正規化中的一種,它仿照數學概念中的公式演算去解決問題,是一種更接近數學語言的程式設計方式。並且我們知道函式式程式設計中所有的函式都是 純函式 pure function 因為只有純函式才符合數學...