【學習筆記】python 進階特性
阿新 • • 發佈:2018-02-11
可能 pytho red nbsp python blog 有一個 自省 blue
容器(
__slots__
魔法
在Python中,每個類都有實例屬性。默認情況下Python用一個字典來保存一個對象的實例屬性。這非常有用,因為它允許我們在運行時去設置任意的新屬性。
然而,對於有著已知屬性的小類來說,它可能是個瓶頸。這個字典浪費了很多內存。Python不能在對象創建時直接分配一個固定量的內存來保存所有的屬性。因此如果你創建許多對象(我指的是成千上萬個),它會消耗掉很多內存。
不過還是有一個方法來規避這個問題。這個方法需要使用__slots__
來告訴Python不要使用字典,而且只給一個固定集合的屬性分配空間。
自省
類似java反射。
自省(introspection),在計算機編程領域裏,是指在運行時來判斷一個對象的類型的能力。它是Python的強項之一。Python中所有一切都是一個對象,而且我們可以仔細勘察那些對象。Python包含了許多內置函數和模塊來幫助我們。
dir/type/id 內置函數
inspect 模塊
容器(Collections
)
defaultdict: 與dict相比的優點:單層key賦值無需檢查key存在(需要在賦值前判斷是否存在指定key等):
from collections import defaultdict colours = ( (‘Yasoob‘, ‘Yellow‘), (‘Ali‘, ‘Blue‘), (‘Arham‘, ‘Green‘), (‘Ali‘, ‘Black‘), (‘Yasoob‘, ‘Red‘), (‘Ahmed‘, ‘Silver‘), ) favourite_colours= defaultdict(list) for name, colour in colours: favourite_colours[name].append(colour) # 這裏無需判斷 name 是否存在,另一種情況遍歷的時候無需區分第一次賦值還是後續賦值(這倆種情況有些許不同) print(favourite_colours)
嵌套key使用特殊方法避免KeyError:
import collections tree = lambda: collections.defaultdict(tree) some_dict = tree() some_dict[‘colours‘][‘favourite‘] = "yellow"deque
namedtuple
【學習筆記】python 進階特性