Python個人學習筆記 雜項(一)
⑴ 動態(tài)設置/獲取對象的屬性
⑵?isinstance()函數(shù)
⑶?重寫
⑷ 裝飾器?
⑸ functools.reduce()函數(shù)
⑹?enumerate()函數(shù)
⑺?filter()函數(shù)
⑻ 函數(shù)名變量
⑼ 數(shù)字內(nèi)下劃線
⑽ help()函數(shù) 函數(shù)注釋

⑴ setattr() / getattr()
動態(tài)設置/獲取對象的屬性。
可以根據(jù)需要,用 setattr() 函數(shù)動態(tài)地設置類中沒有預設過的屬性。
用 getattr() 函數(shù)可以獲取屬性。

⑵?isinstance()函數(shù)
用于判斷類型。
相比用 type() 函數(shù),可以一次同時判斷多種類型。
第一個參數(shù)為判斷的對象,第二個參數(shù)為類型,或者多個類型組成的元組。

⑶?重寫
子類如果想覆蓋或擴展父類中某函數(shù)的功能,可以用函數(shù)的重寫。
例:
定義了一個可以實現(xiàn)負整數(shù)乘法的字符串類,但又想要這個自定義字符串類有自帶的字符串的所有功能,這時候可以繼承原字符串類,然后再重寫乘法法則函數(shù)。

⑷ 裝飾器?
用于包裝一個函數(shù),可以執(zhí)行原始函數(shù)的所有操作,并添加其他要執(zhí)行的語句。
裝飾器的參數(shù)為所要包裝的函數(shù)的函數(shù)名,返回包裝好的新函數(shù)。
裝飾器中,需要定義新函數(shù)(函數(shù)名也可以隨便臨時命名一個,最后用原函數(shù)名替換新函數(shù)名)。參數(shù)須為原函數(shù)所能接受的參數(shù),但由于可以包裝各種不同的函數(shù),并不能確定原函數(shù)到底要什么參數(shù),所以需要新函數(shù)能接受可變長度參數(shù),用*args接受任意長度的參數(shù)列表,用**kwargs接受任意長度的關鍵字參數(shù)(參數(shù)名可以隨便換,慣用是這2個名)。
在新函數(shù)中引用舊函數(shù)、添加新語句,最后裝包好的函數(shù)可以執(zhí)行原函數(shù)和新加語句。
最常用來添加確定函數(shù)的執(zhí)行時長。
也可以給新函數(shù)重新命名。
@運算符
用@運算符可以直接包裝原函數(shù)并把新函數(shù)賦值給原函數(shù)。

⑸ functools.reduce()函數(shù)
對一個序列進行迭代操作,返回一個單一的結果值。
第一個參數(shù)為要執(zhí)行的函數(shù),第二個參數(shù)為可迭代對象。
工作原理為,從可迭代對象取出前2個元素執(zhí)行第一個參數(shù)的函數(shù),執(zhí)行結果與下一個元素再次執(zhí)行函數(shù),直到結束。
可以少寫不必要的循環(huán)。
運用operator庫,可以不需要再用定義匿名函數(shù)來引用基本運算。

⑹?enumerate()函數(shù)
用于將一個可迭代對象組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標組成的元組,默認從0開始。

⑺?filter()函數(shù)
用于對可迭代對象中的每個元素進行判斷,返回值為 True 的元素組成一個迭代器。

⑻ 函數(shù)名變量
函數(shù)名(包括匿名函數(shù))也可以作為字典、列表的元素。

⑼ 數(shù)字內(nèi)下劃線
可以用下劃線劃分數(shù)字(讀取時無視下劃線,用于方便讀取大數(shù)字)。
不能放在第一個數(shù)字前,不能用雙下劃線。(會被當作變量名)

⑽ help()函數(shù) 函數(shù)注釋
可以為自定義類和函數(shù)寫注釋。
注釋須接在類名、函數(shù)名接下來一行,并用三引號引用。
用 help() 函數(shù)可查看注釋。
