【學習筆記】python 進階特性

__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

相關文章
相關標籤/搜索