<內容簡介>
用Python編寫程序,是相當容易的,所以這門語言非常流行。但若想掌握Python所特有的優勢、魅力和表達能力,則相當困難,而且語言中還有很多隱藏的陷阱,容易令開發者犯錯。
《Effective Python(編寫高質量Python代碼的59個有效方法)》可以幫你掌握真正的Pythonic編程方式,令你能夠完全發揮出Python語言的強大功能,並寫出健壯而高效的代碼。Scott Meyer's在暢銷書《Effective C++》中開創了一種以使用場景為主導的精練教學方式,本書作者佈雷特·斯拉特金就以這種方式匯聚了59條優秀的實踐原則、開發技巧和便捷方案,並以實用的代碼範例來解釋它們。
斯拉特根據自己在Google公司多年開發Python基礎架構所積累的經驗,揭示Python語言中一些鮮為人知的微妙特性,並給出了能夠改善代碼功能及運行效率的習慣用法。通過本書,你能夠瞭解到解決關鍵編程任務所用的最佳方式,並學會編寫易於理解、便於維護且利於改進的代碼。
<章節目錄>
本書讚譽
譯 者 序
前 言
致 謝
第1章 用Pythonic方式來思考
第1條:確認自己所用的Python版本
第2條:遵循PEP 8風格指南
第3條:瞭解bytes、str與unicode的區別
第4條:用輔助函數來取代複雜的表達式
第5條:瞭解切割序列的辦法
第6條:在單次切片操作內,不要同時指定start、end和stride
第7條:用列表推導來取代map和filter
第8條:不要使用含有兩個以上表達式的列表推導
第9條:用生成器表達式來改寫數據量較大的列表推導
第10條:盡量用enumerate取代range
第11條:用zip函數同時遍歷兩個迭代器
第12條:不要在for和while循環後面寫else塊
第13條:合理利用try/except/else/finally結構中的每個代碼塊
第2章 函數
第14條:盡量用異常來表示特殊情況,而不要返回None
第15條:瞭解如何在閉包里使用外圍作用域中的變量
第16條:考慮用生成器來改寫直接返回列表的函數
第17條:在參數上面迭代時,要多加小心
第18條:用數量可變的位置參數減少視覺噪聲
第19條:用關鍵字參數來表達可選的行為
第20條:用None和文檔字符串來描述具有動態默認值的參數
第21條:用只能以關鍵字形式指定的參數來確保代碼明晰
第3章 類與繼承
第22條:盡量用輔助類來維護程序的狀態,而不要用字典和元組
第23條:簡單的接口應該接受函數,而不是類的實例
第24條:以@classmethod形式的多態去通用地構建對象
第25條:用super初始化父類
第26條:只在使用Mix-in組件製作工具類時進行多重繼承
第27條:多用public屬性,少用private屬性
第28條:繼承collections.abc以實現自定義的容器類型
第4章 元類及屬性 84
第29條:用純屬性取代get和set方法
第30條:考慮用@property來代替屬性重構
第31條:用描述符來改寫需要復用的@property方法
第32條:用__getattr__、__getattribute__和__setattr__實現按需生成的屬性
第33條:用元類來驗證子類
第34條:用元類來註冊子類
第35條:用元類來註解類的屬性
第5章 併發及並行
第36條:用subprocess模塊來管理子進程
第37條:可以用線程來執行阻塞式I/O,但不要用它做平行計算
第38條:在線程中使用Lock來防止數據競爭
第39條:用Queue來協調各線程之間的工作
第40條:考慮用協程來併發地運行多個函數
第41條:考慮用concurrent.futures來實現真正的平行計算
第6章 內置模塊
第42條:用functools.wraps定義函數修飾器
第43條:考慮以contextlib和with語句來改寫可復用的try/finally代碼
第44條:用copyreg實現可靠的pickle操作
第45條:應該用datetime模塊來處理本地時間,而不是用time模塊
第46條:使用內置演算法與數據結構
第47條:在重視精確度的場合,應該使用decimal
第48條:學會安裝由Python開發者社區所構建的模塊
第7章 協作開發
第49條:為每個函數、類和模塊編寫文檔字符串
第50條:用包來安排模塊,並提供穩固的API
第51條:為自編的模塊定義根異常,以便將調用者與API相隔離
第52條:用適當的方式打破循環依賴關係
第53條:用虛擬環境隔離項目,並重建其依賴關係
第8章 部署
第54條:考慮用模塊級別的代碼來配置不同的部署環境
第55條:通過repr字符串來輸出調試信息
第56條:用unittest來測試全部代碼
第57條:考慮用pdb實現交互調試
第58條:先分析性能,然後再優化
第59條:用tracemalloc來掌握內存的使用及泄漏情況
<作者介紹>