「Fluent Python」今年最佳技術書籍
Fluent Python 讀書手記java
- Python數據模型:特殊方法用來給整個語言模型特殊使用,一致性體現。如:__len__, __getitem__
- AOP: zope.inteface
- 列表推導(list comprehensive)和 表達式生成器(generator expression),分別用 [...] 和 (...)表未。後者是迭代生成,更節省內存。
- 元組tuple兩大功能特性:不可變、用做數據記錄結構(位置信息)。元組裏的元素最好也是不可變數據。
- array 和 列表相比的區別和優點。array只能存單一數據類型,好比array[int],而列表是任何數據類型的容器。可是array在存儲上更節約內存,由於實現就是分配連續的內存記錄二進制數據表示。
- dict的 setdefault,能夠方便處理可能不存在鍵的值操做。
- dict的鍵是可散列的,知足三個條件。支持hash()函數,經過__hash__實現;經過 __eq__ 檢測相等性;若 a == b,則 hash(a) == hash(b)
- 接收函數參數或者返回函數的函數能夠稱爲高階函數
- 自定義類中重寫 __call__( ) 方法,能夠把類實例變爲可直接調用的函數對象。
- python中的inspect模塊,提供了不少內省方法,像java的reflect包。six庫。
- operator 和 functools 模塊中有不少定義好的高階函數能夠,方便編寫函數式代碼風格。
- 抽象類能夠繼承abc.ABC,使用 @abstractmethod 修飾。
- 由於在Python中函數也是對象,能夠用來傳參和返回,因此23經典設計模式在Python中可能不徹底適用,或者以更簡單的方式使用。
- 裝飾器函數是導入模塊時(load module)時就執行,而不是運行時執行。這個特性可用於框架處理一些啓動註冊的工做。
- 在嵌套函數中,若是要引用外部的不可變象並從新賦值,則須要使用 nolocal 關鍵字聲明變量再操做。
- functools.lru_cache 能夠緩存某個計算代價很大的函數結果。
- functools.singledispatch 能夠寫出相似Java中方法重載的代碼
- @classmethod 和 @staticmethod 的區別。前者第一個參數是Class自己,後者就是一普通函數。
- @Property 設置getter/setter屬性
- Python中接口,是指「鴨子類型」協議,即一個類具備類似的行爲,但跟繼承沒有什麼關係。可是抽象類(接口)在現實世界中是存在的,因此能夠經過 abc.ABC 來定義抽象基類。
- 不要直接繼承內置的類,好比 list, dict。由於繼承內置類,子類重寫的方法若是經過python協議調用,不會使用子類的方法。好比 A extends list, A重寫了 __len__,可是調用 len(a) 仍是使用list的內置方法。解決辦法是使用 pypy中的類,好比collections.abc中的類。
- for/while/try - else 更應該按 for/while/try - then 語義理解更好些。
- GIL指CPython實現一次只容許使用一個線程執行Python字節碼,由於CPython解釋器原本不是安全的。可是對於IO密集型場景無害,由於標準庫中全部阻塞IO都會釋放GIL(global interpreter locl)。可是CPU密集型計算則會有影響。
歡迎關注本站公眾號,獲取更多信息