__slots__
魔法在Python中,每一個類都有實例屬性。默認狀況下Python用一個字典來保存一個對象的實例屬性。這很是有用,由於它容許咱們在運行時去設置任意的新屬性。java
然而,對於有着已知屬性的小類來講,它多是個瓶頸。這個字典浪費了不少內存。Python不能在對象建立時直接分配一個固定量的內存來保存全部的屬性。所以若是你建立許多對象(我指的是成千上萬個),它會消耗掉不少內存。
不過仍是有一個方法來規避這個問題。這個方法須要使用__slots__
來告訴Python不要使用字典,並且只給一個固定集合的屬性分配空間。編程
相似java反射。app
自省(introspection),在計算機編程領域裏,是指在運行時來判斷一個對象的類型的能力。它是Python的強項之一。Python中全部一切都是一個對象,並且咱們能夠仔細勘察那些對象。Python包含了許多內置函數和模塊來幫助咱們。函數
dir/type/id 內置函數spa
inspect 模塊code
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:blog
import collections tree = lambda: collections.defaultdict(tree) some_dict = tree() some_dict['colours']['favourite'] = "yellow"deque
namedtuple