《流暢的Python》讀書筆記

2022-06-02 14:45:08 字數 1973 閱讀 7395

第1章:python資料模型

通過實現特殊方法,自定義資料型別可以表現得和內建型別一樣;

__repr__方便除錯和記錄日誌,__str__方便使用者看;

序列資料型別特殊方法使用最多;

第2章:序列構成的陣列

系列型別可分為 可變和不可變、扁平序列和容器序列;

列表推導生成器表示式提供了靈活構建和初始化序列的方式;

元組、切片、array.array、collections.deque。。。

第3章:字典和集合

字典算是python的基石;除dict外,有其他好用的如defaultdict、orderedict、chainmap、counter(屬於collections模組);

對映型別兩個方法:setdefault、update

對映型別api中:__missing__

dict、set背後的雜湊表效率很高;

第4章:文字和位元組序列

乙個字元不等於乙個位元組;

二進位制資料型別:bytes、bytearray、memoryview;unicodeencodeerror、unicodedecodeerror、syntaxerror;

第5章:一等函式

把函式賦值給變數、傳給其他函式、儲存在資料結構中、訪問函式的屬性;

高階函式、列表推導、規約函式;

python有7中可呼叫物件,從lambda表示式建立的簡單函式到實現__call__方法的類例項;

第6章:使用一等函式實現設計模式

可使用一等函式簡化模式實現;

第7章:函式裝飾器和閉包

引數化裝飾器基本上都涉及至少兩層巢狀函式;

要理解裝飾器,需要區分匯入時和執行時、知道變數作用域、閉包和新增的nonlocal宣告;

第8章:物件引用、可變性和垃圾**

每個python物件都有標識、型別和值;

變數儲存的是引用;

cpython中物件的引用計數歸零後會被立即銷毀;

第9章:符合pyhton風格的物件

簡潔勝於複雜;

使用__slots__節省記憶體;

要構建符合python風格的物件,就要觀察真正的python物件;

第10章:序列的修改、雜湊和切片

myseq[a:b:c]原理:建立slice(a, b, c)物件,交給__getitem__方法處理;

模仿python標準物件行為;

第11章:介面:從協議到抽象基類

抽象基類動態特性:虛擬子類、使用__subclasshook__方法動態識別子類;

第12章:繼承的優缺點

內建型別的原生方法使用c語言實現,不會呼叫子類中覆蓋的方法,極少數例外;

多重繼承是雙刃劍;__mro__類屬性中蘊藏方法解析順序;

第13章:正確過載運算子

進製過載內建型別的運算子,而且限於過載現有的運算子(is、and、or、not例外);

第14章:可迭代物件、迭代器和生成器

iter函式;

第15章:上下文管理器和else模組

上下文管理器和with:管理檔案,其他用途、、

contextlib模組裡的函式,@contextmanager裝飾器

第16章:協程

通過客戶呼叫.send(...)方法傳送資料或使用yeild from結構驅動的生成器函式;

第17章:使用期物處理併發

concurrent.futures,asyncio.future;

多執行緒和多程序併發的底層實現;

第18章:使用asyncio包處理併發

使用yeild from、協程、期物和asyncio時間迴圈做併發程式設計;

第19章:動態屬性和特性

動態屬性程式設計;

使用特性處理刪除屬性;

第20章:屬性描述符

託管屬性和儲存屬性;

描述符類與使用函式式程式設計方式構建的特性工廠函式;

第21章:類元程式設計

類元程式設計指動態建立類或定製類;

抽象基類、元類;

流暢的python讀書筆記

1.雖然也可以用列表推導來初始化元組 陣列或其他序列型別,但是生成器表示式是更好的選擇。這是因為生成器表示式背後遵守了迭代器協議,可以逐個地產出元素,而不是先建立乙個完整的列表,然後再把這個列表傳遞到某個建構函式裡。前面那種方式顯然能夠節省記憶體。生成器表示式的語法跟列表推導差不多,只不過把方括號換...

《流暢的Python》讀書筆記(三)

country code my dict.setdefault key,使用 collections.defaultdict import collections index collections.defaultdict list index hunan changsha index defaul...

《流暢的python》讀書筆記(7)

增量賦值運算子 和 的表現取決於它們的第乙個操作物件 背後的特殊方法是iadd 用於 就地加法 但是如果乙個類沒有實現這個方法的話,python 會退一步呼叫 add 如果 a 實現了iadd方法,就會呼叫這個方法。同時對可變序列 例如list bytearray 和 array.array 來說,...