●本書贊譽
譯者序
前言
致謝
第1章培養Pythonic思維
第1條查詢自己使用的Python版本
第2條遵循PEP8風格指南
第3條了解bytes與str的區別
第4條用支持插值的f-string取代C風格的格式字符串與str.format方法
第5條用輔助函數取代復雜的表達式
第6條把數據結構直接拆分到多個變量裡,不要專門通過下標訪問
第7條盡量用enumerate取代range
第8條用zip函數同時遍歷兩個迭代器
第9條不要在for與while循環後面寫else塊
第10條用賦值表達式減少重復代碼
第2章列表與字典
第11條學會對序列做切片
第12條不要在切片裡同時指定起止下標與步進
第13條通過帶星號的unpacking操作來捕素,不要用切片
第14條用sort方法的key參數來表示復雜的排序邏輯
第15條不要過分依賴給字典添加條目時所用的順序
第16條用get處理鍵不在字典中的情況,不要使用in與KeyError
第17條用defaultdict處理內部狀態中素,而不要用setdefault
第18條學會利用__missing__構造依賴鍵的默認值
第3章函數
第19條不要把函數返回的多個數值拆分到三個以上的變量中
第20條遇到意外狀況時應該拋出異常,不要返回None
第21條了解如何在閉包裡面使用外圍作用域中的變量
第22條用數量可變的位置參數給函數設計清晰的參數列表
第23條用關鍵字參數來表示可選的行為
第24條用None和docstring來描述默認值會變的參數
第25條用隻能以關鍵字指定和隻能按位置傳入的參數來設計清晰的參數列表
第26條用functools.wraps定義函數修飾器
第4章推導與生成
第27條用列表推導取代map與filter
第28條控制推導邏輯的子表達式不要超過兩個
第29條用賦值表達式消除推導中的重復代碼
第30條不要讓函數直接返回列表,應該讓它逐個生成列表裡的值
第31條謹慎地迭代函數所收到的參數
第32條考慮用生成器表達式改寫數據量較大的列表推導
第33條通過yieldfrom把多個生成器連起來用
第34條不要用send給生成器注入數據
第35條不要通過throw變換生成器的狀態
第36條考慮用itertools拼裝迭代器與生成器
第5章類與接口
第37條用組合起來的類來實現多層結構,不要用嵌套的內置類型
第38條讓簡單的接口接受函數,而不是類的實例
第39條通過@classmethod多態來構造同一體繫中的各類對像
第40條通過super初始化超類
第41條考慮用mix-in類來表示可組合的功能
第42條優先考慮用public屬性表示應受保護的數據,不要用private屬性表示
第43條自定義的容器類型應該從collections.abc繼承
類與屬性
第44條用純屬性與修飾器取代舊式的setter與getter方法
第45條考慮用@property實現新的屬性訪問邏輯,不要急著重構原有的代碼
第46條用描述符來改寫需要復用的@property方法
第47條針對惰性屬性使用__getattr__、__getattribute__及__setattr
第48條用__init_subclass__驗證子類寫得是否正確
第49條用__init_subclass__記錄現有的子類
第50條用__set_name__給類屬性加注解
第51條優先考慮通過類修飾器來提供可組合的擴充功能,不類
第7章並發與並行
第52條用subprocess管理子進程
第53條可以用線程執行阻塞式I/O,但不要用它做並行計算
第54條利用Lock防止多個線程爭用同一份數據
第55條用Queue來協調各線程之間的工作進度
第56條學會判斷什麼場合必須做並發
第57條不要在每次fan-out時都新建一批Thread實例
第58條學會正確地重構代碼,以便用Queue做並發
第59條如果必須用線程做並發,那就考慮通過ThreadPoolExecutor實現
第60條用協程實現高並發的I/O
第61條學會用asyncio改寫那些通過線程實現的I/O
第62條結合線程與協程,將代碼順利遷移到asyncio
第63條讓asyncio的事件循環保持暢通,以便進一步提升程序的響應能力
第64條考慮用concurrent.futures實現真正的並行計算
第8章穩定與性能
第65條合理利用try/except/else/finally結構中的每個代碼塊
第66條考慮用contextlib和with語句來改寫可復用的try/finally代碼
第67條用datetime模塊處理本地時間,不要用time模塊
第68條用copyreg實現可靠的pickle操作
第69條在需要準確計算的場合,用decimal表示相應的數值
第70條先分析性能,然後再優化
第71條優先考慮用deque實現生產者-消費者隊列
第72條考慮用bisect搜索已排序的序列
第73條學會使用heapq制作優先級隊列
第74條考慮用memoryview與bytearray來實現無須拷貝的bytes操作
第9章測試與調試
第75條通過repr字符串輸出調試信息
第76條在TestCase子類裡驗證相關的行為
……
用Python很容易就可以寫出程序,所以這門語言特別流行,但Python獨有的一些特征與表現手法卻不是開發者能夠輕松掌握的,而且其中還有許多陷阱,經常容易把人困住。本書能夠幫你掌握真正的Pythonic編程方式,充分發揮Python的優勢,寫出健壯而高效的代碼。Scott,Meyers在其名著EffectiveC++中開創了一種用簡明的場景實例來講述編程經驗的方式,本書作者BrettSlatkin也沿用這種方式,向大家講解Python的編程原則、開發技巧與便捷方案,形成90條建議並配有實用的範例代碼,以便大家能夠扎實地掌握Python語言。Slatkin在Google做了多年的Python基礎架構工作,根據多年的經驗,他在書中指出了一些很少有人注意的問題,並告訴大家如何用相應的代碼範式來提升程序的穩定程度與效率。通過本書,你會了解怎樣用易於理解、易於維護且易於改進的代碼來完成關鍵的編程任務等