Python工匠:案例、技巧與工程實踐(基于Python 3.8,實現Python編程從入門到工匠的躍遷)
定 價:¥99.8
中 教 價:¥58.88 (5.90折)促銷
庫 存 數: 13
本書基于廣受好評的Python工匠系列開源文章。全書從工程實踐角度出發,通過剖析核心知識、展示典型案例與總結實用技巧,幫助大家系統進階Python,寫好工程代碼,做好實踐項目。
本書共計13章,分為五大部分:變量與基礎類型、語法結構、函數與裝飾器、面向對象編程、總結與延伸,涵蓋Python編程的方方面面。本書的寫作方式別具一格,核心知識點都會通過三大板塊來闡述:基礎知識、案例故事、編程建議。其中基礎知識幫助大家快速回顧Python基礎;案例故事由作者經歷的編程項目與案例改編而來,兼具實戰性與趣味性;編程建議以大家喜聞樂見的條目式知識點呈現,短小精悍,可直接應用于自己的編程實踐中。
1.專業:基于GitHub人氣開源文章Python工匠系列,基于Python 3.8,廣受讀者喜愛。2.稀缺:源自本土一線項目案例,融入互聯網大廠工程實踐經驗。3.專注:聚焦真實項目中高頻使用的Python編程核心知識點。4.實用:14個項目案例,60多個編程技巧與建議,立等可用,提供源代碼下載。
朱雷(@piglei)就職于騰訊IEG技術運營部,現任藍鯨工具PaaS平臺負責人,參與和主導了包括藍鯨工具PaaS平臺在內的諸多大型項目,從事后端開發與架構設計十余年,曾就職于搜狐、趕集網。
精通Python語言特性,對如何開發高質量的大型Python工程有獨到見解。 從2016年開始創作Python工匠系列開源技術文章,其GitHub Star數超過4K,被騰訊技術工程等多家媒體全系列轉載,收獲諸多好評。
GitHub賬號:piglei。公眾號:piglei。
前言 v第 1章 變量與注釋 11.1 基礎知識 21.1.1 變量常見用法 21.1.2 給變量注明類型 41.1.3 變量命名原則 61.1.4 注釋基礎知識 111.2 案例故事 14奇怪的冒泡排序算法 151.3 編程建議 171.3.1 保持變量的一致性 181.3.2 變量定義盡量靠近使用 181.3.3 定義臨時變量提升可讀性 201.3.4 同一作用域內不要有太多變量 211.3.5 能不定義變量就別定義 221.3.6 不要使用locals() 231.3.7 空行也是一種注釋 241.3.8 先寫注釋,后寫代碼 251.4 總結 26第 2章 數值與字符串 282.1 基礎知識 292.1.1 數值基礎 292.1.2 布爾值其實也是數字 312.1.3 字符串常用操作 312.1.4 不常用但特別好用的字符串方法 342.1.5 字符串與字節串 362.2 案例故事 392.2.1 代碼里的密碼 392.2.2 別輕易成為SQL語句大師 412.3 編程建議 442.3.1 不必預計算字面量表達式 442.3.2 使用特殊數字:無窮大 462.3.3 改善超長字符串的可讀性 472.3.4 別忘了以r開頭的字符串內置方法 482.3.5 不要害怕字符串拼接 492.4 總結 50第3章 容器類型 533.1 基礎知識 543.1.1 列表常用操作 543.1.2 理解列表的可變性 563.1.3 常用元組操作 603.1.4 具名元組 613.1.5 字典常用操作 633.1.6 認識字典的有序性與無序性 663.1.7 集合常用操作 683.1.8 了解對象的可哈希性 713.1.9 深拷貝與淺拷貝 723.2 案例故事 74分析網站訪問日志 753.3 編程建議 833.3.1 用按需返回替代容器 833.3.2 了解容器的底層實現 863.3.3 掌握如何快速合并字典 893.3.4 使用有序字典去重 913.3.5 別在遍歷列表時同步修改 923.3.6 編寫推導式的兩個不要 923.3.7 讓函數返回NamedTuple 943.4 總結 95第4章 條件分支控制流 974.1 基礎知識 984.1.1 分支慣用寫法 984.1.2 修改對象的布爾值 1014.1.3 與None比較時使用is運算符 1034.2 案例故事 105消失的分支 1054.3 編程建議 1124.3.1 盡量避免多層分支嵌套 1124.3.2 別寫太復雜的條件表達式 1144.3.3 盡量降低分支內代碼的相似性 1154.3.4 使用德摩根定律 1164.3.5 使用all()/any()函數構建條件表達式 1174.3.6 留意and和or的運算優先級 1184.3.7 避開or運算符的陷阱 1184.4 總結 119第5章 異常與錯誤處理 1215.1 基礎知識 1225.1.1 優先使用異常捕獲 1225.1.2 try語句常用知識 1245.1.3 拋出異常,而不是返回錯誤 1275.1.4 使用上下文管理器 1295.2 案例故事 1335.2.1 提前崩潰也挺好 1335.2.2 異常與抽象一致性 1365.3 編程建議 1395.3.1 不要隨意忽略異常 1395.3.2 不要手動做數據校驗 1405.3.3 拋出可區分的異常 1425.3.4 不要使用assert來檢查參數合法性 1445.3.5 無須處理是好的錯誤處理 1455.4 總結 149第6章 循環與可迭代對象 1516.1 基礎知識 1526.1.1 迭代器與可迭代對象 1526.1.2 修飾可迭代對象優化循環 1586.1.3 使用itertools模塊優化循環 1606.1.4 循環語句的else關鍵字 1626.2 案例故事 164數字統計任務 1646.3 編程建議 1686.3.1 中斷嵌套循環的正確方式 1686.3.2 巧用next()函數 1706.3.3 當心已被耗盡的迭代器 1716.4 總結 172第7章 函數 1747.1 基礎知識 1757.1.1 函數參數的常用技巧 1757.1.2 函數返回的常見模式 1797.1.3 常用函數模塊:functools 1847.2 案例故事 187函數與狀態 1877.3 編程建議 1947.3.1 別寫太復雜的函數 1947.3.2 一個函數只包含一層抽象 1967.3.3 優先使用列表推導式 2037.3.4 你沒有那么需要lambda 2047.3.5 了解遞歸的局限性 2057.4 總結 207第8章 裝飾器 2098.1 基礎知識 2118.1.1 裝飾器基礎 2118.1.2 使用functools.wraps()修飾包裝函數 2138.1.3 實現可選參數裝飾器 2158.1.4 用類來實現裝飾器(函數替換) 2178.1.5 用類來實現裝飾器(實例替換) 2198.1.6 使用wrapt模塊助力裝飾器編寫 2218.2 編程建議 2238.2.1 了解裝飾器的本質優勢 2238.2.2 使用類裝飾器替代元類 2258.2.3 別弄混裝飾器和裝飾器模式 2268.2.4 淺裝飾器,深實現 2278.3 總結 228第9章 面向對象編程 2309.1 基礎知識 2329.1.1 類常用知識 2329.1.2 內置類方法裝飾器 2359.1.3 鴨子類型及其局限性 2399.1.4 抽象類 2429.1.5 多重繼承與MRO 2489.1.6 其他知識 2519.2 案例故事 255繼承是把雙刃劍 2559.3 編程建議 2659.3.1 使用__init_subclass__替代元類 2659.3.2 在分支中尋找多態的應用時機 2669.3.3 有序組織你的類方法 2689.3.4 函數搭配,干活不累 2709.4 總結 274第 10章 面向對象設計原則(上) 27610.1 類型注解基礎 27810.2 SRP:單一職責原則 27910.2.1 案例:一個簡單的Hacker News爬蟲 28010.2.2 違反SRP的壞處 28310.2.3 大類拆小類 28410.3 OCP:開放-關閉原則 28510.3.1 接受OCP的考驗 28610.3.2 通過繼承改造代碼 28810.3.3 使用組合與依賴注入 28910.3.4 使用數據驅動 29210.4 總結 294第 11章 面向對象設計原則(下) 29511.1 LSP:里式替換原則 29611.1.1 子類隨意拋出異常 29611.1.2 子類隨意調整方法參數與返回值 30011.1.3 基于隱式合約違反LSP 30411.1.4 LSP小結 30611.2 DIP:依賴倒置原則 30611.2.1 案例:按來源統計Hacker News條目數量 30711.2.2 為腳本編寫單元測試 30911.2.3 實現DIP 31111.2.4 倒置后的單元測試 31411.2.5 DIP小結 31511.3 ISP:接口隔離原則 31711.3.1 案例:處理頁面歸檔需求 31711.3.2 修改實體類 31811.3.3 違反ISP 32011.3.4 分拆接口 32011.3.5 其他違反ISP的場景 32211.4 總結 322第 12章 數據模型與描述符 32412.1 基礎知識 32612.1.1 字符串魔法方法 32612.1.2 比較運算符重載 32912.1.3 描述符 33212.2 案例故事 341處理旅游數據的三種方案 34112.3 編程建議 35012.3.1 認識__hash__的危險性 35012.3.2 數據模型不是躺贏之道 35112.3.3 不要依賴__del__方法 35312.4 總結 354第 13章 開發大型項目 35613.1 常用工具介紹 35713.1.1 flake8 35713.1.2 isort 36013.1.3 black 36113.1.4 pre-commit 36413.1.5 mypy 36513.2 單元測試簡介 36613.2.1 unittest 36713.2.2 pytest 36913.3 有關單元測試的建議 37513.3.1 寫單元測試不是浪費時間 37513.3.2 不要總想著補測試 37713.3.3 難測試的代碼就是爛代碼 37813.3.4 像應用代碼一樣對待測試代碼 37913.3.5 避免教條主義 38013.4 總結 381結語 383