预购商品
书目分类
特别推荐
本書能夠幫你掌握真正的 Pythonic 程式設計方式,充分發揮 Python 的優勢,寫出健壯而高效的代碼。Scott Meyers在其名著Effective C++中開創了一種用簡明的場景實例來講述程式設計經驗的方式,本書作者Brett Slatkin也沿用這種方式,向大家講解 Python 的程式設計原則、開發技巧與便捷方案,形成 90 條建議並配有實用的範例代碼,以便大家能夠紮實地掌握 Python 語言。 【本書的關鍵內容包括】: 31 條新的實用建議,這些建議涵蓋 Python 開發的幾個主要方面。 對各種語句、運算式與內置類型做了詳細講解與演示。 怎樣寫出意圖清晰、便於複用而且不容易出現 bug 的函數。 怎樣更好地使用推導機制與生成器函數。 怎樣用類與介面準確展示相關的行為。 怎樣避開元類與動態屬性中的一些陷阱。 怎樣用更高效且更清晰的方法寫出併發與並行程式。 怎樣優化程式性能並提升代碼品質。 用於改進調試與測試工作的技術與內置模組。 與協作開發有關的工具和經驗。
第1章 培養Pythonic思維 // 1 第1條 查詢自己使用的Python版本 // 1 第2條 遵循PEP 8風格指南 // 2 第3條 瞭解bytes與str的區別 // 5 第4條 用支援插值的f-string取代C風格的格式字串與str.format方法 // 9 第5條 用輔助函數取代複雜的運算式 // 19 第6條 把資料結構直接拆分到多個變數裡,不要專門通過下標訪問 // 21 第7條 儘量用enumerate取代range // 25 第8條 用zip函數同時遍歷兩個反覆運算器 // 26 第9條 不要在for與while迴圈後面寫else塊 // 28 第10條 用賦值運算式減少重複代碼 // 31 第2章 清單與字典 // 37 第11條 學會對序列做切片 // 37 第12條 不要在切片裡同時指定起止下標與步進 // 40 第13條 通過帶星號的unpacking操作來捕獲多個元素,不要用切片 // 42 第14條 用sort方法的key參數來表示複雜的排序邏輯 // 45 第15條 不要過分依賴給字典添加條目時所用的順序 // 51 第16條 用get處理鍵不在字典中的情況,不要使用in與KeyError // 56 第17條 用defaultdict處理內部狀態中缺失的元素,而不要用setdefault // 61 第18條 學會利用__missing__構造依賴鍵的預設值 // 63 第3章 函數 // 66 第19條 不要把函數返回的多個數值拆分到三個以上的變數中 // 66 第20條 遇到意外狀況時應該拋出異常,不要返回None // 69 第21條 瞭解如何在閉包裡面使用週邊作用域中的變數 // 71 第22條 用數量可變的位置參數給函數設計清晰的參數清單 // 75 第23條 用關鍵字參數來表示可選的行為 // 77 第24條 用None和docstring來描述預設值會變的參數 // 80 第25條 用只能以關鍵字指定和只能按位置傳入的參數來設計清晰的參數列表 // 83 第26條 用functools.wraps定義函數修飾器 // 88 第4章 推導與生成 // 91 第27條 用列表推導取代map與filter // 91 第28條 控制推導邏輯的子運算式不要超過兩個 // 93 第29條 用賦值運算式消除推導中的重複代碼 // 94 第30條 不要讓函數直接返回清單,應該讓它逐個生成列表裡的值 // 97 第31條 謹慎地反覆運算函數所收到的參數 // 100 第32條 考慮用生成器運算式改寫資料量較大的清單推導 // 104 第33條 通過yield from把多個生成器連起來用 // 106 第34條 不要用send給生成器注入數據 // 108 第35條 不要通過throw變換生成器的狀態 // 113 第36條 考慮用itertools拼裝反覆運算器與生成器 // 117 第5章 類與介面 // 122 第37條 用組合起來的類來實現多層結構,不要用嵌套的內置類型 // 122 第38條 讓簡單的介面接受函數,而不是類的實例 // 128 第39條 通過@classmethod多態來構造同一體系中的各類物件 // 131 第40條 通過super初始化超類 // 136 第41條 考慮用mix-in類來表示可組合的功能 // 140 第42條 優先考慮用public屬性工作表示應受保護的資料,不要用private屬性工作表示 // 144 第43條 自訂的容器類型應該從collections.abc繼承 // 149 第6章 元類與屬性 // 153 第44條 用純屬性與修飾器取代舊式的setter與getter方法 // 153 第45條 考慮用@property實現新的屬性訪問邏輯,不要急著重構原有的代碼 // 157 第46條 用描述符來改寫需要複用的@property方法 // 160 第47條 針對惰性屬性使用__getattr__、__getattribute__及__setattr__ // 165 第48條 用__init_subclass__驗證子類寫得是否正確 // 170 第49條 用__init_subclass__記錄現有的子類 // 177 第50條 用__set_name__給類屬性加注解 // 181 第51條 優先考慮通過類修飾器來提供可組合的擴充功能,不要使用元類 // 185 第7章 併發與並行 // 191 第52條 用subprocess管理子進程 // 192 第53條 可以用執行緒執行阻塞式I/O,但不要用它做平行計算 // 195 第54條 利用Lock防止多個執行緒爭用同一份資料 // 199 第55條 用Queue來協調各執行緒之間的工作進度 // 202 第56條 學會判斷什麼場合必須做併發 // 210 第57條 不要在每次fan-out時都新建一批Thread實例 // 214 第58條 學會正確地重構代碼,以便用Queue做併發 // 218 第59條 如果必須用執行緒做併發,那就考慮通過ThreadPoolExecutor實現 // 224 第60條 用協程實現高併發的I/O // 226 第61條 學會用asyncio改寫那些通過執行緒實現的I/O // 230 第62條 結合執行緒與協程,將代碼順利遷移到asyncio // 239 第63條 讓asyncio的事件迴圈保持暢通,以便進一步提升程式的回應能力 // 245 第64條 考慮用concurrent.futures實現真正的平行計算 // 248 第8章 穩定與性能 // 253 第65條 合理利用try/except/else/finally結構中的每個代碼塊 // 253 第66條 考慮用contextlib和with語句來改寫可複用的try/finally代碼 // 258 第67條 用datetime模組處理本地時間,不要用time模組 // 262 第68條 用copyreg實現可靠的pickle操作 // 265 第69條 在需要準確計算的場合,用decimal表示相應的數值 // 272 第70條 先分析性能,然後再優化 // 274 第71條 優先考慮用deque實現生產者-消費者佇列 // 278 第72條 考慮用bisect搜索已排序的序列 // 284 第73條 學會使用heapq製作優先順序佇列 // 286 第74條 考慮用memoryview與bytearray來實現無須拷貝的bytes操作 // 294 第9章 測試與調試 // 300 第75條 通過repr字串輸出調試資訊 // 301 第76條 在TestCase子類裡驗證相關的行為 // 304 第77條 把測試前、後的準備與清理邏輯寫在setUp、tearDown、setUpModule與tearDownModule中,以防用例之間互相干擾 // 309 第78條 用Mock來模擬受測代碼所依賴的複雜函數 // 312 第79條 把受測代碼所依賴的系統封裝起來,以便於模擬和測試 // 319 第80條 考慮用pdb做交互調試 // 322 第81條 用tracemalloc來掌握記憶體的使用與洩漏情況 // 326 第10章 協作開發 // 329 第82條 學會尋找由其他Python開發者所構建的模組 // 329 第83條 用虛擬環境隔離專案,並重建依賴關係 // 330 第84條 每一個函數、類與模組都要寫docstring // 335 第85條 用包來安排模組,以提供穩固的API // 339 第86條 考慮用模組級別的代碼配置不同的部署環境 // 344 第87條 為自編的模組定義根異常,讓調用者能夠專門處理與此API有關的異常 // 346 第88條 用適當的方式打破迴圈依賴關係 // 350 第89條 重構時考慮通過warnings提醒開發者API已經發生變化 // 355 第90條 考慮通過typing做靜態分析,以消除bug // 361
Brett Slatkin是Google首席軟體工程師,他是Google Surveys的聯合技術創始人,也是PubSubHubbub協議的共同創造者之一。此外,Slatkin還發佈了Google的第一個雲計算產品——App Engine。早在15年前,Slatkin就開始在工作中使用Python管理Google大量的伺服器群。他擁有紐約哥倫比亞大學電腦工程專業學士學位。
客服公告
热门活动
订阅电子报