1. 程式人生 > >【學習筆記】python 進階特性

【學習筆記】python 進階特性

可能 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 進階特性