本書(shū)介紹Python軟件工程的主要實(shí)踐和原則,旨在幫助讀者編寫(xiě)更易于維護(hù)和更整潔的代碼。全書(shū)共10章:第1章介紹Python語(yǔ)言的基礎(chǔ)知識(shí)和搭建Python開(kāi)發(fā)環(huán)境所需的主要工具;第2章描述Python風(fēng)格代碼,介紹Python中的第一個(gè)習(xí)慣用法;第3章總結(jié)好代碼的一般特征,回顧軟件工程中的一般原則;第4章介紹一套面向?qū)ο筌浖O(shè)計(jì)的原則,即SOLID原則;第5章介紹裝飾器,它是Python的**特性之一;第6章探討描述符,介紹如何通過(guò)描述符從對(duì)象中獲取更多的信息;第7章和第8章介紹生成器以及單元測(cè)試和重構(gòu)的相關(guān)內(nèi)容;第9章回顧Python中最常見(jiàn)的設(shè)計(jì)模式;第10章再次強(qiáng)調(diào)代碼整潔是實(shí)現(xiàn)良好架構(gòu)的基礎(chǔ)。
本書(shū)適合所有Python編程愛(ài)好者、對(duì)程序設(shè)計(jì)感興趣的人,以及其他想學(xué)習(xí)更多Python知識(shí)的軟件工程的從業(yè)人員。
1.介紹實(shí)現(xiàn)Python代碼整潔應(yīng)遵循的基本原則;
2.涵蓋避免由不良代碼導(dǎo)致的效率低下以及存在諸多隱患的代碼的方法;
3.作者專業(yè)背景深厚,項(xiàng)目經(jīng)驗(yàn)豐富;
4.本書(shū)的代碼示例基于Python3.7版本;
5.提供源代碼。
馬里亞諾.阿那亞(Mariano Anaya)是西班牙籍軟件工程師,有豐富的用Python語(yǔ)言開(kāi)發(fā)軟件,并在軟件體系結(jié)構(gòu)、函數(shù)式編程、分布式系統(tǒng)等領(lǐng)域頗有建,曾在2016年和2017年“歐洲Python大會(huì)”上發(fā)表演講。
第 1章 簡(jiǎn)介、代碼格式和工具 1
1.1 代碼整潔的意義 2
1.2 代碼整潔的重要性 2
1.2.1 代碼格式化在代碼整潔中的作用 3
1.2.2 在項(xiàng)目中遵循編碼風(fēng)格準(zhǔn)則 4
1.3 文檔字符串和注解 6
1.3.1 文檔字符串 6
1.3.2 注解 9
1.3.3 注解是否會(huì)替代文檔字符串 11
1.3.4 配置用于實(shí)施基本質(zhì)量控制的工具 12
1.4 小結(jié) 16
第 2章 Python風(fēng)格代碼 17
2.1 索引和切片 18
2.2 上下文管理器 21
2.3 對(duì)象的屬性、特性和不同類(lèi)型的方法 26
2.3.1 Python中的下劃線 27
2.3.2 屬性 29
2.4 可迭代對(duì)象 31
2.4.1 創(chuàng)建可迭代對(duì)象 32
2.4.2 創(chuàng)建序列 34
2.5 容器對(duì)象 36
2.6 對(duì)象的動(dòng)態(tài)屬性 37
2.7 可調(diào)用對(duì)象 39
2.8 魔法方法概述 40
2.9 Python中的警告 41
2.9.1 可變的默認(rèn)參數(shù) 41
2.9.2 擴(kuò)展內(nèi)置類(lèi)型 42
2.10 小結(jié) 44
第3章 好代碼的一般特征 45
3.1 契約式設(shè)計(jì) 46
3.1.1 前置條件 47
3.1.2 后置條件 48
3.1.3 Python的契約 48
3.1.4 設(shè)計(jì)契約:結(jié)論 49
3.2 防錯(cuò)性程序設(shè)計(jì) 50
3.2.1 錯(cuò)誤處理 50
3.2.2 在Python中使用斷言 57
3.3 關(guān)注點(diǎn)分離 58
3.4 常用縮略詞 60
3.4.1 DRY和OAOO 60
3.4.2 YAGNI 62
3.4.3 KIS 63
3.4.4 EAFP和LBYL 64
3.5 組合和繼承 65
3.5.1 什么時(shí)候繼承是一個(gè)好的決定 66
3.5.2 反模式的繼承 67
3.5.3 Python中的多重繼承 69
3.6 函數(shù)和方法中的參數(shù) 72
3.6.1 Python函數(shù)的參數(shù)是如何工作的 73
3.6.2 函數(shù)中參數(shù)的數(shù)量 77
3.7 關(guān)于軟件設(shè)計(jì)良好實(shí)踐的結(jié)束語(yǔ) 80
3.7.1 軟件的正交性 80
3.7.2 構(gòu)建代碼 82
3.8 小結(jié) 83
第4章 SOLID原則 84
4.1 單一職責(zé)原則 84
4.1.1 一個(gè)有太多職責(zé)的類(lèi) 85
4.1.2 分配責(zé)任 86
4.2 打開(kāi)/關(guān)閉原則 87
4.2.1 不遵循打開(kāi)/關(guān)閉原則的可維護(hù)性風(fēng)險(xiǎn)的示例 88
4.2.2 重構(gòu)事件系統(tǒng)以獲得可擴(kuò)展性 90
4.2.3 擴(kuò)展事件系統(tǒng) 92
4.2.4 關(guān)于OCP的結(jié)束語(yǔ) 94
4.3 里氏替換原則 94
4.3.1 使用工具檢測(cè)LSP問(wèn)題 95
4.3.2 更微妙的LSP違規(guī)案例 97
4.3.3 關(guān)于LSP需要注意的一些點(diǎn) 100
4.4 接口隔離原則 100
4.4.1 提供太多信息的接口 102
4.4.2 接口越小越好 102
4.4.3 接口應(yīng)該多小 103
4.5 依賴倒置原則 103
4.5.1 一個(gè)嚴(yán)格依賴的案例 104
4.5.2 倒置依賴 104
4.6 小結(jié) 106
第5章 用裝飾器改進(jìn)代碼 107
5.1 Python中的裝飾器是什么 107
5.1.1 裝飾器函數(shù) 108
5.1.2 裝飾類(lèi) 109
5.1.3 其他類(lèi)型的裝飾器 113
5.1.4 將參數(shù)傳遞給裝飾器 114
5.1.5 充分利用裝飾器 117
5.2 有效的裝飾:避免常見(jiàn)的錯(cuò)誤 118
5.2.1 保存關(guān)于原始包裝對(duì)象的數(shù)據(jù) 118
5.2.2 處理裝飾器中的副作用 121
5.2.3 創(chuàng)建始終有效的裝飾器 125
5.3 裝飾器的DRY原則 128
5.4 裝飾器和關(guān)注點(diǎn)分離 129
5.5 好的裝飾器的相關(guān)分析 130
5.6 小結(jié) 132
第6章 用描述符從對(duì)象中獲取更多信息 133
6.1 初探描述符 133
6.1.1 描述符背后的機(jī)制 133
6.1.2 研究描述符協(xié)議中的每個(gè)方法 136
6.2 描述符的類(lèi)型 142
6.2.1 非數(shù)據(jù)描述符 143
6.2.2 數(shù)據(jù)描述符 145
6.3 描述符的實(shí)際應(yīng)用 147
6.3.1 描述符的一種應(yīng)用 147
6.3.2 實(shí)現(xiàn)描述符的不同形式 151
6.3.3 關(guān)于描述符的更多考慮 154
6.4 分析描述符 158
6.4.1 Python內(nèi)部如何使用描述符 158
6.4.2 在裝飾器中實(shí)現(xiàn)描述符 163
6.5 小結(jié) 164
第7章 使用生成器 165
7.1 技術(shù)要求 165
7.2 創(chuàng)建生成器 165
7.2.1 初探生成器 166
7.2.2 生成器表達(dá)式 168
7.3 慣用迭代 169
7.3.1 迭代的習(xí)慣用法 169
7.3.2 Python中的迭代器模式 175
7.4 協(xié)同程序 179
7.4.1 使用生成器接口的方法 179
7.4.2 更先進(jìn)的協(xié)同程序 184
7.5 異步編程 191
7.6 小結(jié) 192
第8章 單元測(cè)試和重構(gòu) 193
8.1 設(shè)計(jì)原則和單元測(cè)試 193
8.1.1 關(guān)于其他形式的自動(dòng)化測(cè)試的說(shuō)明 194
8.1.2 單元測(cè)試和敏捷軟件開(kāi)發(fā) 195
8.1.3 單元測(cè)試和軟件設(shè)計(jì) 196
8.1.4 定義測(cè)試內(nèi)容的邊界 199
8.2 測(cè)試的框架和工具 200
8.2.1 用于單元測(cè)試的框架和庫(kù) 200
8.2.2 代碼覆蓋率 209
8.2.3 模擬對(duì)象(Mock對(duì)象) 211
8.3 代碼重構(gòu) 216
8.3.1 代碼演進(jìn) 216
8.3.2 需要演進(jìn)的不僅僅是生產(chǎn)代碼 218
8.4 更多關(guān)于單元測(cè)試的信息 220
8.4.1 基于屬性的測(cè)試 220
8.4.2 突變測(cè)試 221
8.5 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的簡(jiǎn)要介紹 223
8.6 小結(jié) 224
第9章 常見(jiàn)的設(shè)計(jì)模式 225
9.1 Python中設(shè)計(jì)模式的注意事項(xiàng) 225
9.2 有效的設(shè)計(jì)模式 227
9.2.1 創(chuàng)建型模式 227
9.2.2 結(jié)構(gòu)型模式 233
9.2.3 行為模式 240
9.3 空對(duì)象模式 250
9.4 關(guān)于設(shè)計(jì)模式的最后想法 252
9.4.1 模式對(duì)設(shè)計(jì)的影響 252
9.4.2 模型中的名稱 253
9.5 小結(jié) 254
第 10章 整潔架構(gòu) 255
10.1 從整潔代碼到整潔架構(gòu) 255
10.1.1 關(guān)注點(diǎn)分離 256
10.1.2 抽象 257
10.2 軟件組件 258
10.2.1 包 258
10.2.2 容器 261
10.3 用例 262
10.3.1 編碼 263
10.3.2 服務(wù) 268
10.3.3 分析 271
10.4 小結(jié) 273
寫(xiě)在最后 274