第1章 簡介 1
1.1 什麼是Python技巧 1
1.2 本書作用 2
1.3 如何閱讀本書 2
第2章 Python整潔之道 4
2.1 用斷言加一層保險 4
2.1.1 示例:Python中的斷言 4
2.1.2 為什麼不用普通的異常來處理 6
2.1.4 常見陷阱 6
2.1.5 Python斷言總結 9
2.1.6 關鍵要點 9
2.2 巧妙地放置逗號 9
2.3 上下文管理器和with語句 11
2.3.1 在自定義對象中支持with 12
2.3.2 用上下文管理器編寫漂亮的API 13
2.3.3 關鍵要點 15
2.4 下劃綫、雙下劃綫及其他 15
2.4.1 前置單下劃綫:_var 15
2.4.2 後置單下劃綫:var_ 17
2.4.3 前置雙下劃綫:__var 17
2.4.4 前後雙下劃綫:__var__ 20
2.4.5 單下劃綫:_ 21
2.4.6 關鍵要點 22
2.5 字符串格式化中令人震驚的真相 22
2.5.1 第一種方法:“舊式”字符串格式化 22
2.5.2 第二種方法:“新式”字符串格式化 23
2.5.3 第三種方法:字符串字麵值插值(Python 3.6+) 24
2.5.4 第四種方法:模闆字符串 25
2.5.5 如何選擇字符串格式化方法 26
2.5.6 關鍵要點 27
2.6 “Python之禪”中的彩蛋 27
第3章 高效的函數 28
3.1 函數是Python的頭等對象 28
3.1.1 函數是對象 28
3.1.2 函數可存儲在數據結構中 29
3.1.3 函數可傳遞給其他函數 30
3.1.4 函數可以嵌套 31
3.1.5 函數可捕捉局部狀態 32
3.1.6 對象也可作為函數使用 33
3.1.7 關鍵要點 33
3.2 lambda是單錶達式函數 34
3.2.1 lambda的使用場景 35
3.2.2 不應過度使用lambda 36
3.2.3 關鍵要點 36
3.3 裝飾器的力量 37
3.3.1 Python裝飾器基礎 38
3.3.2 裝飾器可以修改行為 39
3.3.3 將多個裝飾器應用於一個函數 41
3.3.5 如何編寫“可調試”的裝飾器 44
3.4 有趣的*args和**kwargs 44
3.4.1 傳遞可選參數或關鍵字參數 45
3.4.2 關鍵要點 46
3.5 函數參數解包 47
3.6 返迴空值 48
第4章 類與麵嚮對象 51
4.1 對象比較:is 與== 51
4.2 字符串轉換(每個類都需要__repr__) 52
4.2.1 __str__與__repr__ 54
4.2.2 為什麼每個類都需要__repr__ 55
4.2.3 Python 2.x的差異:__unicode__ 57
4.2.4 關鍵要點 58
4.3 定義自己的異常類 58
4.4 剋隆對象 60
4.4.1 製作淺副本 61
4.4.2 製作深副本 62
4.4.3 復製任意對象 63
4.4.4 關鍵要點 65
4.5 用抽象基類避免繼承錯誤 65
4.6 namedtuple的優點 67
4.6.1 namedtuple上場 68
4.6.2 子類化namedtuple 70
4.6.3 內置的輔助方法 70
4.6.4 何時使用namedtuple 71
4.6.5 關鍵要點 71
4.7 類變量與實例變量的陷阱 72
4.7.1 與狗無關的例子 74
4.7.2 關鍵要點 75
4.8 實例方法、類方法和靜態方法揭秘 75
4.8.1 實例方法 76
4.8.2 類方法 76
4.8.3 靜態方法 76
4.8.4 在實踐中探尋 77
4.8.5 使用@classmethod的Pizza工廠類 78
4.8.6 什麼時候使用靜態方法 80
4.8.7 關鍵要點 81
第5章 Python中常見的數據結構 82
5.1 字典、映射和散列錶 83
5.1.1 dict——首選字典實現 83
5.1.2 collections.OrderedDict——能記住鍵的插入順序 84
5.1.3 collections.defaultdict——為缺失的鍵返迴默認值 85
5.1.4 collections.ChainMap——搜索多個字典 85
5.1.5 types.MappingProxyType——用於創建隻讀字典 86
5.1.6 Python中的字典:總結 86
5.1.7 關鍵要點 87
5.2 數組數據結構 87
5.2.1 列錶——可變動態數組 88
5.2.2 元組——不可變容器 88
5.2.3 array.array——基本類型數組 89
5.2.4 str——含有Unicode 字符的不可變數組 90
5.2.5 bytes——含有單字節的不可變數組 91
5.2.6 bytearray——含有單字節的可變數組 91
5.2.7 關鍵要點 92
5.3 記錄、結構體和純數據對象 93
5.3.1 字典——簡單數據對象 93
5.3.2 元組——不可變對象集閤 94
5.3.3 編寫自定義類——手動精細控製 96
5.3.4 collections.namedtuple——方便的數據對象 96
5.3.5 typing.NamedTuple——改進版namedtuple 97
5.3.6 struct.Struct——序列化C結構體 98
5.3.7 types.SimpleNamespace——花哨的屬性訪問 99
5.3.8 關鍵要點 99
5.4 集閤和多重集閤 100
5.4.1 set——首選集閤實現 101
5.4.2 frozenset——不可變集閤 101
5.4.3 collections.Counter——多重集閤 101
5.4.4 關鍵要點 102
5.5 棧(後進先齣) 102
5.5.1 列錶——簡單的內置棧 103
5.5.2 collections.deque——快速且穩健的棧 104
5.5.3 queue.LifoQueue——為並行計算提供鎖語義 104
5.5.4 比較Python 中各個棧的實現 105
5.6 隊列(先進先齣) 106
5.6.1 列錶——非常慢的隊列 107
5.6.2 collections.deque——快速和穩健的隊列 107
5.6.3 queue.Queue——為並行計算提供的鎖語義 108
5.6.4 multiprocessing.Queue——共享作業隊列 108
5.6.5 關鍵要點 109
5.7 優先隊列 109
5.7.1 列錶——手動維護有序隊列 110
5.7.3 queue.PriorityQueue——美麗的優先級隊列 111
5.7.4 關鍵要點 111
第6章 循環和迭代 112
6.1 編寫Python式的循環 112
6.2 理解解析式 114
6.3 列錶切片技巧與壽司操作員 116
6.4 美麗的迭代器 118
6.4.1 無限迭代 119
6.4.2 for-in循環在Python中的工作原理 121
6.4.3 更簡單的迭代器類 122
6.4.4 不想無限迭代 123
6.4.5 Python 2.x兼容性 125
6.4.6 關鍵要點 126
6.5 生成器是簡化版迭代器 126
6.5.1 無限生成器 126
6.5.2 能夠停下來的生成器 128
6.5.3 關鍵要點 130
6.6 生成器錶達式 130
6.6.1 生成器錶達式與列錶解析式 132
6.6.3 內聯生成器錶達式 133
6.6.4 物極必反 133
6.6.5 關鍵要點 134
6.7 迭代器鏈 134
第7章 字典技巧 137
7.1 字典默認值 137
7.2 字典排序 139
7.3 用字典模擬switch/case語句 141
7.4 “最瘋狂”的字典錶達式 144
7.5 閤並詞典的幾種方式 148
7.6 美觀地輸齣字典 149
第8章 Python式高效技巧 152
8.1 探索Python的模塊和對象 152
8.2 用virtualenv隔離項目依賴關係 154
8.2.1 使用虛擬環境 155
8.2.2 關鍵要點 157
8.3 在字節碼後一窺究竟 157
第9章 結語 161
9.1 針對Python開發者免費每周提示 161
9.2 PythonistaCafe:Python開發人員的社區 162
· · · · · · (
收起)