Python學(xué)習(xí)手冊(cè)第4 版將幫助你使用Python快速實(shí)現(xiàn)這一點(diǎn),不管你是編程新手還是Python初學(xué)者。本書(shū)是易于掌握和自學(xué)的教程,根據(jù)作者Python專家Mark Lutz的著名培訓(xùn)課程編寫(xiě)而成。
Python學(xué)習(xí)手冊(cè)第4版每一章都包含關(guān)于Python語(yǔ)言的關(guān)鍵內(nèi)容的獨(dú)立的一課,并且包含了一個(gè)獨(dú)特的“練習(xí)題”部分,其中帶有實(shí)際的練習(xí)和測(cè)試,以便你可以練習(xí)新的技能并隨著學(xué)習(xí)而測(cè)試自己的理解。你會(huì)發(fā)現(xiàn)眾多帶有注釋的示例以及圖表,它們將幫助你開(kāi)始學(xué)習(xí)Python 3.0。
內(nèi)容簡(jiǎn)介:
學(xué)習(xí)Python的主要內(nèi)建對(duì)象類(lèi)型:數(shù)字、列表和字典。
使用Python語(yǔ)句創(chuàng)建和處理對(duì)象,并且學(xué)習(xí)Python的通用語(yǔ)法模型。
使用函數(shù)構(gòu)造和重用代碼,函數(shù)是Python的基本過(guò)程工具。
學(xué)習(xí)Python模塊:封裝語(yǔ)句、函數(shù)以及其他工具,從而可以組織成較大的組件。
Python的面向?qū)ο缶幊坦ぞ,用于組織程序代碼。
學(xué)習(xí)異常處理模型,以及用于編寫(xiě)較大程序的開(kāi)發(fā)工具。
了解包括裝飾器、描述器、元類(lèi)和Unicode處理等高級(jí)Python工具。
Python學(xué)習(xí)手冊(cè)第4版對(duì)比以前的版本:
從以下3個(gè)方面做出了修改:
■ 覆蓋了Python 3.0和Python 2.6,本書(shū)強(qiáng)調(diào)Python 3.0,但是對(duì)Python 2.6中的不同之處給出了提示。
■ 包含了一些新的章節(jié),主要介紹高級(jí)的核心語(yǔ)言話題。
■ 重新組織了一些已有的材料,并且使用新的示例擴(kuò)展它們以便更清楚。
我(作者M(jìn)ark Lutz)在2009年撰寫(xiě)本書(shū)這一版時(shí),Python分為兩支——Python 3.0是新興的版本并且不兼容地修改了該語(yǔ)言;Python 2.6保持與大量已有的Python代碼向后兼容。盡管Python 3被視作是Python的未來(lái),Python 2仍然使用廣泛并且會(huì)在未來(lái)的幾年內(nèi)與Python 3并列地得到支持。盡管只是同一種語(yǔ)言的不同版本,但Python 3.0幾乎無(wú)法運(yùn)行為之前版本編寫(xiě)的代碼(單單print從語(yǔ)句修改為函數(shù),聽(tīng)上去更合理,但是,它幾乎影響到所有已經(jīng)編寫(xiě)好的Python程序)。
版本的劃分使得程序員和圖書(shū)作者都陷入了兩難的境地。盡管編寫(xiě)一本好像Python 2不存在而只介紹Python 3的圖書(shū)很容易,但這可能無(wú)法滿足大量基于已有代碼的Python用戶的需求。大量已有代碼都是針對(duì)Python 2編寫(xiě)的,并且它們不會(huì)很快過(guò)時(shí)。盡管現(xiàn)在的初學(xué)者更關(guān)注Python 3,但如果他們必須使用過(guò)去編寫(xiě)的代碼,那么就必須熟悉Python 2。所有的第三方庫(kù)和擴(kuò)展都移植到Python 3可能還需要數(shù)年時(shí)間,所以Python 2這一分支可能不完全是臨時(shí)性的。
覆蓋Python 3.0和Python 2.6
為了解決這一分歧并且滿足所有潛在讀者的需求,《Python學(xué)習(xí)手冊(cè)》第4版更新為覆蓋Python 3.0和Python 2.6(以及Python 3.X和Python 2.X系列的后續(xù)發(fā)布)。本書(shū)針對(duì)使用Python 2編程的程序員、使用Python 3的程序員,以及介于這二者之間的程序員。
也就是說(shuō),你可以使用本書(shū)來(lái)學(xué)習(xí)任何的Python版本。盡管這里主要關(guān)注Python 3.0,但Python 2.6的不同之處和工具也都針對(duì)使用舊代碼的程序員給出了提示。盡管這兩個(gè)版本大部分是相同的,但它們還是在一些重要的方面有所不同,對(duì)此我將指出兩者的區(qū)別。
例如,在大多數(shù)示例中,我們使用Python 3.0的print調(diào)用,但是,我也將介紹Python 2.6的print語(yǔ)句,以便使你能夠理解較早的代碼。我還廣泛地介紹了新功能,例如Python 3.0中的nonlocal語(yǔ)句和Python 2.6以及Python 3.0中的字符串的format方法,當(dāng)較早的Python中沒(méi)有這樣的擴(kuò)展時(shí),我將會(huì)指出來(lái)。
如果你初次學(xué)習(xí)Python并且不需要使用任何遺留代碼,我鼓勵(lì)你從Python 3.0開(kāi)始,它清理了這一語(yǔ)言中長(zhǎng)久以來(lái)的一些瑕疵,同時(shí)保留了所有最初的核心思想并且添加了一些漂亮的新工具。
當(dāng)你閱讀本書(shū)時(shí),很多流行的Python庫(kù)和工具可能也支持Python 3.0了,特別是在未來(lái)的Python 3.1版本中,可以預(yù)期文件I/O性能會(huì)有較大的提升。如果你使用基于Python 2.X的一個(gè)系統(tǒng),將會(huì)發(fā)現(xiàn)本書(shū)解決了你所關(guān)心的問(wèn)題,并且將幫助你在未來(lái)過(guò)渡到Python 3.0。
此外,本版也介紹了其他的Python 2和Python 3的發(fā)布版本,盡管一些舊的Python 2.X代碼可能無(wú)法運(yùn)行本書(shū)的所有示例。例如,盡管在Python 2.6和Python 3.0中都有類(lèi)裝飾器,但我們無(wú)法在還沒(méi)有這一功能的舊Python 2.X中使用它。參見(jiàn)前言中的表0-1和表0-2,它們概括了Python 2.6和Python 3.0中的變化。
注意: 就在付梓前不久,本書(shū)中還添加了關(guān)于未來(lái)的Python 3.1版的一些突出的擴(kuò)展的提示,如:字符串format方法調(diào)用中的逗號(hào)分隔符和自動(dòng)字段編號(hào)、with語(yǔ)句中的多環(huán)境管理器語(yǔ)法、針對(duì)數(shù)字的新方法等。由于Python 3.1的主要目標(biāo)是優(yōu)化,本書(shū)也直接應(yīng)用這一新發(fā)布。事實(shí)上,由于Python 3.1在Python 3.0后接踵而來(lái),并且最新的Python通常是最好的可用Python,在本書(shū)中,術(shù)語(yǔ)“Python 3.0”通常指的是Python 3.0引入的但在整個(gè)Python 3.X版本中都將存在的語(yǔ)言變化。
新增章
盡管本版的主要目標(biāo)是針對(duì)Python 3.0和Python 2.6更新之前的版本的示例和內(nèi)容,但我們也增加了5章新內(nèi)容,以介紹新的主題和增加的內(nèi)容。
第27章是一個(gè)新的類(lèi)教程,使用更加實(shí)際的示例來(lái)說(shuō)明Python面向?qū)ο缶幊痰幕A(chǔ)知識(shí)。
第36章提供了關(guān)于Unicode和字節(jié)字符串的詳細(xì)介紹,并且概括了Python 2.6和Python 3.0中字符串和文件的區(qū)別。
第37章介紹了特性這樣的管理屬性工具,并且對(duì)描述符給出了新的介紹。
第38章介紹了函數(shù)和類(lèi)裝飾器,并且給出了全面的示例。
第39章介紹了元類(lèi),并且將它們與描述符進(jìn)行了比較和對(duì)比。
第27章針對(duì)Python中的類(lèi)和OOP提供了一個(gè)漸進(jìn)的、按部就班的教程。它基于我在近年所教授的培訓(xùn)課程中已經(jīng)使用的一個(gè)現(xiàn)場(chǎng)展示,但是,為了在本書(shū)中使用已經(jīng)對(duì)它進(jìn)行了修改。該章設(shè)計(jì)來(lái)在比此前的示例更為實(shí)際的背景中展示OOP,并且說(shuō)明類(lèi)概念如何綜合運(yùn)用于較大的、實(shí)用的程序中。我期望它在這里與在實(shí)際的課程中一樣有效。
后面新增的4章收錄到了本書(shū)的最后一個(gè)新增部分中,即“高級(jí)話題”部分。盡管這些主題從技術(shù)上講都屬于核心語(yǔ)言,但不是每個(gè)Python程序員都需要深入了解Unicode文本或元類(lèi)的細(xì)節(jié)。因此,這4章單獨(dú)放到了新的部分中,并且正式地作為可選的閱讀材料。例如,關(guān)于Unicode和二進(jìn)制數(shù)據(jù)字符串的細(xì)節(jié)已經(jīng)放入到了此部分中,因?yàn)榇蠖鄶?shù)程序員使用簡(jiǎn)單的ASCII字符串,而不需要了解這些主題。類(lèi)似地,裝飾器和元類(lèi)通常也只是API構(gòu)建者才感興趣的專門(mén)話題,而不是應(yīng)用程序員所感興趣的話題。
然而,如果你確實(shí)使用這些工具,或者使用代碼來(lái)做這些工作,“高級(jí)話題”部分的章節(jié)應(yīng)該能夠幫助你掌握其基礎(chǔ)知識(shí)。此外,這些章的示例包含了學(xué)習(xí)案例,這些案例把核心語(yǔ)言概念綁定到了一起,并且它們比本書(shū)其他部分的示例更充實(shí)。由于這個(gè)新的部分是可選閱讀材料,所以該部分最后只有問(wèn)答題但沒(méi)有練習(xí)題。
Python學(xué)習(xí)手冊(cè)第4版目錄:
前言 1
第一部分 使用入門(mén)
第1章 問(wèn)答環(huán)節(jié) 19
人們?yōu)楹问褂肞ython 19
軟件質(zhì)量 20
開(kāi)發(fā)效率 21
Python是“腳本語(yǔ)言”嗎 21
好吧,Python的缺點(diǎn)是什么呢 23
如今誰(shuí)在使用Python 23
使用Python可以做些什么 24
系統(tǒng)編程 25
用戶圖形接口 25
Internet腳本 25
組件集成 26
數(shù)據(jù)庫(kù)編程 26
快速原型 27
數(shù)值計(jì)算和科學(xué)計(jì)算編程 27
游戲、圖像、人工智能、XML、機(jī)器人等 27
Python如何獲得支持 28
Python有哪些技術(shù)上的優(yōu)點(diǎn) 28
面向?qū)ο?28
免費(fèi) 29
可移植 29
功能強(qiáng)大 30
可混合 31
簡(jiǎn)單易用 31
簡(jiǎn)單易學(xué) 32
Python和其他語(yǔ)言比較起來(lái)怎么樣 32
本章小結(jié) 33
本章習(xí)題 33
習(xí)題解答 34
Python是工程,不是藝術(shù) 34
第2章 Python如何運(yùn)行程序 36
Python解釋器簡(jiǎn)介 36
程序執(zhí)行 37
程序員的視角 37
Python的視角 39
執(zhí)行模塊的變體 41
Python實(shí)現(xiàn)的替代者 42
執(zhí)行優(yōu)化工具 43
凍結(jié)二進(jìn)制文件 44
其他執(zhí)行選項(xiàng) 45
未來(lái)的可能性 46
本章小結(jié) 46
本章習(xí)題 47
習(xí)題解答 47
第3章 如何運(yùn)行程序 48
交互提示模式下編寫(xiě)代碼 48
交互地運(yùn)行代碼 49
為什么使用交互提示模式 51
使用交互提示模式 52
系統(tǒng)命令行和文件 54
第一段腳本 55
使用命令行運(yùn)行文件 56
使用命令行和文件 57
UNIX可執(zhí)行腳本(#!) 58
UNIX env查找技巧 59
點(diǎn)擊文件圖標(biāo) 60
在Windows中點(diǎn)擊圖標(biāo) 60
input的技巧 61
圖標(biāo)點(diǎn)擊的其他限制 63
模塊導(dǎo)入和重載 63
模塊的顯要特性:屬性 65
import和reload的使用注意事項(xiàng) 68
使用exec運(yùn)行模塊文件 69
IDLE用戶界面 70
IDLE基礎(chǔ) 71
使用IDLE 72
高級(jí)IDLE工具 74
其他的IDE 74
其他啟動(dòng)選項(xiàng) 76
嵌入式調(diào)用 76
凍結(jié)二進(jìn)制的可執(zhí)行性 77
文本編輯器啟動(dòng)的選擇 77
其他的啟動(dòng)選擇 77
未來(lái)的可能 77
我應(yīng)該選用哪種 78
調(diào)試Python代碼 78
本章小結(jié) 80
本章習(xí)題 80
習(xí)題解答 80
第一部分 練習(xí)題 81
第二部分 類(lèi)型和運(yùn)算
第4章 介紹Python對(duì)象類(lèi)型 87
為什么使用內(nèi)置類(lèi)型 88
Python的核心數(shù)據(jù)類(lèi)型 88
數(shù)字 90
字符串 92
序列的操作 92
不可變性 94
類(lèi)型特定的方法 94
尋求幫助 96
編寫(xiě)字符串的其他方法 97
模式匹配 98
列表 98
序列操作 98
類(lèi)型特定的操作 99
邊界檢查 100
嵌套 100
列表解析 101
字典 103
映射操作 103
重訪嵌套 104
鍵的排序:for 循環(huán) 105
迭代和優(yōu)化 107
不存在的鍵:if 測(cè)試 107
元組 109
為什么要用元組 109
文件 110
其他文件類(lèi)工具 111
其他核心類(lèi)型 111
如何破壞代碼的靈活性 113
用戶定義的類(lèi) 114
剩余的內(nèi)容 115
本章小結(jié) 115
本章習(xí)題 116
習(xí)題解答 116
第5章 數(shù)字 117
Python的數(shù)字類(lèi)型 117
數(shù)字常量 118
內(nèi)置數(shù)學(xué)工具和擴(kuò)展 119
Python表達(dá)式操作符 120
在實(shí)際應(yīng)用中的數(shù)字 125
變量和基本的表達(dá)式 125
數(shù)字顯示的格式 126
比較:一般的和連續(xù)的 127
str和repr顯示格式 128
除法: 傳統(tǒng)除法、Floor除法和真除法 129
整數(shù)精度 133
復(fù)數(shù) 133
十六進(jìn)制、八進(jìn)制和二進(jìn)制記數(shù) 134
位操作 136
其他的內(nèi)置數(shù)學(xué)工具 137
其他數(shù)字類(lèi)型 139
小數(shù)數(shù)字 139
分?jǐn)?shù)類(lèi)型 141
集合 145
布爾型 151
數(shù)字?jǐn)U展 152
本章小結(jié) 153
本章習(xí)題 153
習(xí)題解答 153
第6章 動(dòng)態(tài)類(lèi)型簡(jiǎn)介 155
缺少類(lèi)型聲明語(yǔ)句的情況 155
變量、對(duì)象和引用 156
類(lèi)型屬于對(duì)象,而不是變量 157
對(duì)象的垃圾收集 158
共享引用 159
共享引用和在原處修改 161
共享引用和相等 163
動(dòng)態(tài)類(lèi)型隨處可見(jiàn) 164
本章小結(jié) 165
本章習(xí)題 165
習(xí)題解答 165
第7章 字符串 167
字符串常量 169
單雙引號(hào)字符串是一樣的 170
用轉(zhuǎn)義序列代表特殊字節(jié) 171
raw字符串抑制轉(zhuǎn)義 173
三重引號(hào)編寫(xiě)多行字符串塊 175
實(shí)際應(yīng)用中的字符串 176
基本操作 176
索引和分片 177
為什么要在意:分片 181
字符串轉(zhuǎn)換工具 181
修改字符串 184
字符串方法 185
字符串方法實(shí)例:修改字符串 187
字符串方法實(shí)例:文本解析 189
實(shí)際應(yīng)用中的其他常見(jiàn)字符串方法 190
最初的字符串模塊(在Python 3.0中刪除) 191
字符串格式化表達(dá)式 192
更高級(jí)的字符串格式化表達(dá)式 194
基于字典的字符串格式化 196
字符串格式化調(diào)用方法 196
基礎(chǔ)知識(shí) 197
添加鍵、屬性和偏移量 198
添加具體格式化 198
與%格式化表達(dá)式比較 200
為什么用新的格式化方法 203
通常意義下的類(lèi)型分類(lèi) 206
同樣分類(lèi)的類(lèi)型共享其操作集合 206
可變類(lèi)型能夠在原處修改 207
本章小結(jié) 208
本章習(xí)題 208
習(xí)題解答 208
第8章 列表與字典 210
列表 210
實(shí)際應(yīng)用中的列表 213
基本列表操作 213
列表迭代和解析 213
索引、分片和矩陣 214
原處修改列表 215
字典 220
實(shí)際應(yīng)用中的字典 222
字典的基本操作 222
原處修改字典 223
其他字典方法 224
語(yǔ)言表 225
字典用法注意事項(xiàng) 226
為什么要在意字典接口 229
創(chuàng)建字典的其他方法 230
Python 3.0中的字典變化 231
本章小結(jié) 237
本章習(xí)題 237
習(xí)題解答 237
第9章 元組、文件及其他 239
元組 239
實(shí)際應(yīng)用中的元組 241
為什么有了列表還要元組 243
文件 243
打開(kāi)文件 244
使用文件 245
實(shí)際應(yīng)用中的文件 246
其他文件工具 252
重訪類(lèi)型分類(lèi) 254
為什么要在意操作符重載 255
對(duì)象靈活性 255
引用 VS 拷貝 256
比較、相等性和真值 258
Python 3.0的字典比較 260
Python中真和假的含義 261
Python的類(lèi)型層次 263
Type對(duì)象 263
Python中的其他類(lèi)型 265
內(nèi)置類(lèi)型陷阱 265
賦值生成引用,而不是拷貝 265
重復(fù)能夠增加層次深度 266
留意循環(huán)數(shù)據(jù)結(jié)構(gòu) 266
不可變類(lèi)型不可以在原處改變 267
本章小結(jié) 267
本章習(xí)題 268
習(xí)題解答 268
第二部分練習(xí)題 269
第三部分 語(yǔ)句和語(yǔ)法
第10章 Python語(yǔ)句簡(jiǎn)介 275
重訪Python程序結(jié)構(gòu) 275
Python的語(yǔ)句 276
兩個(gè)if的故事 278
Python增加了什么 279
Python刪除了什么 279
為什么使用縮進(jìn)語(yǔ)法 281
幾個(gè)特殊實(shí)例 283
簡(jiǎn)短實(shí)例:交互循環(huán) 285
一個(gè)簡(jiǎn)單的交互式循環(huán) 285
對(duì)用戶輸入數(shù)據(jù)做數(shù)學(xué)運(yùn)算 287
用測(cè)試輸入數(shù)據(jù)來(lái)處理錯(cuò)誤 288
用try語(yǔ)句處理錯(cuò)誤 289
嵌套代碼三層 290
本章小結(jié) 290
本章習(xí)題 291
習(xí)題解答 291
第11章 賦值、表達(dá)式和打印 292
賦值語(yǔ)句 292
賦值語(yǔ)句的形式 293
序列賦值 294
Python 3.0中的擴(kuò)展序列解包 297
多目標(biāo)賦值語(yǔ)句 301
增強(qiáng)賦值語(yǔ)句 302
變量命名規(guī)則 305
Python的廢棄協(xié)議 306
表達(dá)式語(yǔ)句 308
表達(dá)式語(yǔ)句和在原處的修改 309
打印操作 310
Python 3.0的print函數(shù) 311
Python 2.6 print語(yǔ)句 313
打印流重定向 315
版本獨(dú)立的打印 318
為什么要注意print和stdout 319
本章小結(jié) 320
本章習(xí)題 321
習(xí)題解答 321
第12章 if測(cè)試和語(yǔ)法規(guī)則 322
if語(yǔ)句 322
通用格式 322
基本例子 323
多路分支 323
Python語(yǔ)法規(guī)則 325
代碼塊分隔符 326
語(yǔ)句的分隔符 328
一些特殊情況 329
真值測(cè)試 330
if/else三元表達(dá)式 332
為什么要在意布爾值 334
本章小結(jié) 335
本章習(xí)題 335
習(xí)題解答 335
第13章 while和for循環(huán) 336
while循環(huán) 336
一般格式 336
例子 337
break、continue、pass和循環(huán)else 338
一般循環(huán)格式 338
pass 338
continue 340
break 340
循環(huán)else 341
為什么要在意“模擬C 語(yǔ)言的while循環(huán)” 342
for循環(huán) 343
一般格式 343
例子 344
為什么要在意“文件掃描” 349
編寫(xiě)循環(huán)的技巧 350
循環(huán)計(jì)數(shù)器:while和range 351
非完備遍歷:range和分片 352
修改列表:range 353
并行遍歷:zip和map 354
產(chǎn)生偏移和元素:enumerate 357
本章小結(jié) 358
本章習(xí)題 358
習(xí)題解答 359
第14章 迭代器和解析,第一部分 360
迭代器:初探 360
文件迭代器 361
手動(dòng)迭代:iter和next 363
其他內(nèi)置類(lèi)型迭代器 365
列表解析:初探 367
列表解析基礎(chǔ)知識(shí) 368
在文件上使用列表解析 369
擴(kuò)展的列表解析語(yǔ)法 370
其他迭代環(huán)境 371
Python 3.0中的新的可迭代對(duì)象 375
range迭代器 376
map、zip和filter迭代器 377
多個(gè)迭代器 VS單個(gè)迭代器 378
字典視圖迭代器 379
其他迭代器主題 381
本章小結(jié) 381
本章習(xí)題 381
習(xí)題解答 382
第15章 文檔 383
Python文檔資源 383
#注釋 384
dir函數(shù) 384
文檔字符串:__doc__ 385
PyDoc:help函數(shù) 388
PyDoc:HTML報(bào)表 390
標(biāo)準(zhǔn)手冊(cè)集 393
網(wǎng)絡(luò)資源 394
已出版的書(shū)籍 394
常見(jiàn)編寫(xiě)代碼的陷阱 395
本章小結(jié) 397
本章習(xí)題 397
習(xí)題解答 397
第三部分練習(xí)題 398
第四部分 函數(shù)
第16章 函數(shù)基礎(chǔ) 403
為何使用函數(shù) 404
編寫(xiě)函數(shù) 405
def語(yǔ)句 406
def語(yǔ)句是實(shí)時(shí)執(zhí)行的 407
第一個(gè)例子:定義和調(diào)用 408
定義 408
調(diào)用 408
Python中的多態(tài) 409
第二個(gè)例子:尋找序列的交集 410
定義 410
調(diào)用 411
重訪多態(tài) 411
本地變量 412
本章小結(jié) 413
本章習(xí)題 413
習(xí)題解答 413
第17章 作用域 415
Python作用域基礎(chǔ) 415
作用域法則 416
變量名解析:LEGB原則 418
作用域?qū)嵗?419
內(nèi)置作用域 420
在Python 2.6中違反通用性 422
global語(yǔ)句 422
最小化全局變量 423
最小化文件間的修改 424
其他訪問(wèn)全局變量的方法 426
作用域和嵌套函數(shù) 427
嵌套作用域的細(xì)節(jié) 427
嵌套作用域舉例 427
nonlocal語(yǔ)句 433
nonlocal基礎(chǔ) 433
nonlocal應(yīng)用 435
為什么使用nonlocal 437
本章小結(jié) 440
本章習(xí)題 441
習(xí)題解答 442
第18章 參數(shù) 444
傳遞參數(shù) 444
參數(shù)和共享引用 445
避免可變參數(shù)的修改 447
對(duì)參數(shù)輸出進(jìn)行模擬 448
特定的參數(shù)匹配模型 449
基礎(chǔ)知識(shí) 449
匹配語(yǔ)法 450
細(xì)節(jié) 452
關(guān)鍵字參數(shù)和默認(rèn)參數(shù)的實(shí)例 452
任意參數(shù)的實(shí)例 455
Python 3.0 Keyword-Only參數(shù) 459
min調(diào)用 462
滿分 463
加分點(diǎn) 464
結(jié)論 465
一個(gè)更有用的例子:通用set函數(shù) 465
模擬Python 3.0 print函數(shù) 466
使用Keyword-Only參數(shù) 467
為什么要在意:關(guān)鍵字參數(shù) 469
本章小結(jié) 469
本章習(xí)題 470
習(xí)題解答 470
第19章 函數(shù)的高級(jí)話題 472
函數(shù)設(shè)計(jì)概念 472
遞歸函數(shù) 474
用遞歸求和 474
編碼替代方案 475
循環(huán)語(yǔ)句VS遞歸 476
處理任意結(jié)構(gòu) 477
函數(shù)對(duì)象:屬性和注解 478
間接函數(shù)調(diào)用 478
函數(shù)內(nèi)省 479
函數(shù)屬性 480
Python 3.0中的函數(shù)注解 481
匿名函數(shù): lambda 483
lambda表達(dá)式 483
為什么使用lambda 484
如何(不要)讓Python代碼變得晦澀難懂 486
嵌套lambda和作用域 487
為什么要在意:回調(diào) 488
在序列中映射函數(shù):map 489
函數(shù)式編程工具:filter和reduce 490
本章小結(jié) 492
本章習(xí)題 492
習(xí)題解答 492
第20章 迭代和解析,第二部分 494
回顧列表解析:函數(shù)式編程工具 494
列表解析與map 495
增加測(cè)試和嵌套循環(huán) 496
列表解析和矩陣 498
理解列表解析 499
為什么要在意:列表解析和map 500
重訪迭代器:生成器 501
生成器函數(shù):yield VS return 502
生成器表達(dá)式:迭代器遇到列表解析 506
生成器函數(shù) VS 生成器表達(dá)式 507
生成器是單迭代器對(duì)象 508
用迭代工具模擬zip和map 510
為什么你會(huì)留意:?jiǎn)未蔚?514
內(nèi)置類(lèi)型和類(lèi)中的值生成 515
Python 3.0解析語(yǔ)法概括 516
解析集合和字典解析 517
針對(duì)集合和字典的擴(kuò)展的解析語(yǔ)法 517
對(duì)迭代的各種方法進(jìn)行計(jì)時(shí) 518
對(duì)模塊計(jì)時(shí) 519
計(jì)時(shí)腳本 519
計(jì)時(shí)結(jié)果 520
計(jì)時(shí)模塊替代方案 523
其他建議 527
函數(shù)陷阱 528
本地變量是靜態(tài)檢測(cè)的 528
默認(rèn)和可變對(duì)象 529
沒(méi)有return語(yǔ)句的函數(shù) 531
嵌套作用域的循環(huán)變量 532
本章小結(jié) 532
本章習(xí)題 532
習(xí)題解答 533
第四部分練習(xí)題 533
第五部分 模塊
第21章 模塊:宏偉藍(lán)圖 539
為什么使用模塊 540
Python程序架構(gòu) 540
如何組織一個(gè)程序 541
導(dǎo)入和屬性 541
標(biāo)準(zhǔn)庫(kù)模塊 543
import如何工作 543
1.搜索 544
2.編譯(可選) 544
3.運(yùn)行 545
模塊搜索路徑 545
配置搜索路徑 547
搜索路徑的變動(dòng) 548
sys.path列表 548
模塊文件選擇 549
高級(jí)的模塊選擇概念 550
第三方工具:distutils 550
本章小結(jié) 551
本章習(xí)題 551
習(xí)題解答 551
第22章 模塊代碼編寫(xiě)基礎(chǔ) 553
模塊的創(chuàng)建 553
模塊的使用 554
import語(yǔ)句 554
from語(yǔ)句 555
from *語(yǔ)句 555
導(dǎo)入只發(fā)生一次 555
import和from是賦值語(yǔ)句 556
文件間變量名的改變 557
import和from的對(duì)等性 557
from語(yǔ)句潛在的陷阱 558
模塊命名空間 560
文件生成命名空間 560
屬性名的點(diǎn)號(hào)運(yùn)算 562
導(dǎo)入和作用域 562
命名空間的嵌套 563
重載模塊 564
reload基礎(chǔ) 565
reload實(shí)例 566
為什么要在意:模塊重載 567
本章小結(jié) 568
本章習(xí)題 568
習(xí)題解答 568
第23章 模塊包 570
包導(dǎo)入基礎(chǔ) 570
包和搜索路徑設(shè)置 571
__init__.py包文件 572
包導(dǎo)入實(shí)例 573
包對(duì)應(yīng)的from語(yǔ)句和import語(yǔ)句 574
為什么要使用包導(dǎo)入 575
三個(gè)系統(tǒng)的傳說(shuō) 576
包相對(duì)導(dǎo)入 578
Python 3.0中的變化 578
相對(duì)導(dǎo)入基礎(chǔ)知識(shí) 579
為什么使用相對(duì)導(dǎo)入 581
相對(duì)導(dǎo)入的作用域 583
模塊查找規(guī)則總結(jié) 583
相對(duì)導(dǎo)入的應(yīng)用 584
為什么要在意:模塊包 589
本章小結(jié) 590
本章習(xí)題 590
習(xí)題解答 590
第24章 高級(jí)模塊話題 592
在模塊中隱藏?cái)?shù)據(jù) 592
最小化from *的破壞:_X和__all__ 593
啟用以后的語(yǔ)言特性 593
混合用法模式:__name__和__main__ 594
以__name__進(jìn)行單元測(cè)試 595
使用帶有__name__的命令行參數(shù) 596
修改模塊搜索路徑 599
Import語(yǔ)句和from語(yǔ)句的as擴(kuò)展 599
模塊是對(duì)象:元程序 600
用名稱字符串導(dǎo)入模塊 603
過(guò)渡性模塊重載 604
模塊設(shè)計(jì)理念 607
模塊陷阱 607
頂層代碼的語(yǔ)句次序的重要性 608
from復(fù)制變量名,而不是連接 609
from *會(huì)讓變量語(yǔ)義模糊 610
reload不會(huì)影響from導(dǎo)入 610
reload、from以及交互模式測(cè)試 611
遞歸形式的from導(dǎo)入無(wú)法工作 612
本章小結(jié) 613
本章習(xí)題 613
習(xí)題解答 613
第五部分練習(xí)題 614
第六部分 類(lèi)和OOP
第25章 OOP:宏偉藍(lán)圖 619
為何使用類(lèi) 620
概覽OOP 621
屬性繼承搜索 621
類(lèi)和實(shí)例 623
類(lèi)方法調(diào)用 624
編寫(xiě)類(lèi)樹(shù) 624
OOP是為了代碼重用 627
本章小結(jié) 629
本章習(xí)題 629
習(xí)題解答 630
第26章 類(lèi)代碼編寫(xiě)基礎(chǔ) 631
類(lèi)產(chǎn)生多個(gè)實(shí)例對(duì)象 631
類(lèi)對(duì)象提供默認(rèn)行為 632
實(shí)例對(duì)象是具體的元素 632
第一個(gè)例子 632
類(lèi)通過(guò)繼承進(jìn)行定制 635
第二個(gè)例子 635
類(lèi)是模塊內(nèi)的屬性 637
類(lèi)可以截獲Python運(yùn)算符 638
第三個(gè)例子 639
為什么要使用運(yùn)算符重載 641
世界上最簡(jiǎn)單的Python類(lèi) 641
類(lèi)與字典的關(guān)系 644
本章小結(jié) 646
本章習(xí)題 646
習(xí)題解答 646
第27章 更多實(shí)例 649
步驟1:創(chuàng)建實(shí)例 650
編寫(xiě)構(gòu)造函數(shù) 650
在進(jìn)行中測(cè)試 651
以兩種方式使用代碼 652
版本差異提示 654
步驟2:添加行為方法 654
編寫(xiě)方法 656
步驟3:運(yùn)算符重載 658
提供打印顯示 658
步驟4:通過(guò)子類(lèi)定制行為 659
編寫(xiě)子類(lèi) 660
擴(kuò)展方法:不好的方式 660
擴(kuò)展方法:好的方式 661
多態(tài)的作用 663
繼承、定制和擴(kuò)展 664
OOP:大思路 664
步驟5:定制構(gòu)造函數(shù) 665
OOP比我們認(rèn)為的要簡(jiǎn)單 666
組合類(lèi)的其他方式 667
在Python 3.0中捕獲內(nèi)置屬性 669
步驟6:使用內(nèi)省工具 670
特殊類(lèi)屬性 670
一種通用顯示工具 671
實(shí)例與類(lèi)屬性的關(guān)系 672
工具類(lèi)的命名考慮 673
類(lèi)的最終形式 674
步驟7(最后一步):把對(duì)象存儲(chǔ)到數(shù)據(jù)庫(kù)中 676
Pickle和Shelve 676
在shelve數(shù)據(jù)庫(kù)中存儲(chǔ)對(duì)象 677
交互地探索shelve 678
更新shelve中的對(duì)象 680
未來(lái)方向 681
本章小結(jié) 683
本章習(xí)題 684
習(xí)題解答 684
第28章 類(lèi)代碼編寫(xiě)細(xì)節(jié) 686
class語(yǔ)句 686
一般形式 686
例子 687
方法 689
例子 690
調(diào)用超類(lèi)構(gòu)造函數(shù) 691
其他方法調(diào)用的可能性 691
繼承 692
屬性樹(shù)的構(gòu)造 692
繼承方法的專有化 693
類(lèi)接口技術(shù) 694
抽象超類(lèi) 695
Python 2.6和Python 3.0的抽象超類(lèi) 696
命名空間:完整的內(nèi)容 698
簡(jiǎn)單變量名:如果賦值就不是全局變量 698
屬性名稱:對(duì)象命名空間 698
Python命名空間的“禪”:賦值將變量名分類(lèi) 699
命名空間字典 701
命名空間鏈接 704
回顧文檔字符串 706
類(lèi)與模塊的關(guān)系 707
本章小結(jié) 708
本章習(xí)題 708
習(xí)題解答 708
第29章 運(yùn)算符重載 710
基礎(chǔ)知識(shí) 710
構(gòu)造函數(shù)和表達(dá)式:__init__和__sub__ 711
常見(jiàn)的運(yùn)算符重載方法 711
索引和分片:__getitem__和__setitem__ 713
攔截分片 713
Python 2.6中的分片和索引 715
索引迭代:__getitem__ 716
迭代器對(duì)象:__iter__和__next__ 717
用戶定義的迭代器 717
有多個(gè)迭代器的對(duì)象 719
成員關(guān)系:__contains__、__iter__和__getitem__ 721
屬性引用:__getattr__和__setattr__ 723
其他屬性管理工具 725
模擬實(shí)例屬性的私有性:第一部分 725
__repr__和__str__會(huì)返回字符串表達(dá)形式 726
右側(cè)加法和原處加法:__radd__和__iadd__ 729
原處加法 730
Call表達(dá)式:__call__ 731
函數(shù)接口和回調(diào)代碼 732
比較:__lt__、__gt__和其他方法 734
Python 2.6的__cmp__方法(已經(jīng)從Python 3.0中移除了) 734
布爾測(cè)試:__bool__和__len__ 735
Python 2.6中的布爾 736
對(duì)象析構(gòu)函數(shù):__del__ 738
本章小結(jié) 739
本章習(xí)題 739
習(xí)題解答 739
第30章 類(lèi)的設(shè)計(jì) 741
Python和OOP 741
通過(guò)調(diào)用標(biāo)記進(jìn)行重載(或不要) 742
OOP和繼承:“是一個(gè)”關(guān)系 743
OOP和組合:“有一個(gè)”關(guān)系 744
重訪流處理器 746
為什么要在意:類(lèi)和持續(xù)性 748
OOP和委托:“包裝”對(duì)象 749
類(lèi)的偽私有屬性 751
變量名壓縮概覽 751
為什么使用偽私有屬性 752
方法是對(duì)象:綁定或無(wú)綁定 754
在Python 3.0中,無(wú)綁定方法是函數(shù) 756
綁定方法和其他可調(diào)用對(duì)象 757
為什么要在意:綁定方法和回調(diào)函數(shù) 760
多重繼承:“混合”類(lèi) 760
編寫(xiě)混合顯示類(lèi) 761
類(lèi)是對(duì)象:通用對(duì)象的工廠 771
為什么有工廠 772
與設(shè)計(jì)相關(guān)的其他話題 773
本章小結(jié) 773
本章習(xí)題 774
習(xí)題解答 774
第31章 類(lèi)的高級(jí)主題 775
擴(kuò)展內(nèi)置類(lèi)型 775
通過(guò)嵌入擴(kuò)展類(lèi)型 776
通過(guò)子類(lèi)擴(kuò)展類(lèi)型 777
新式類(lèi) 779
新式類(lèi)變化 780
類(lèi)型模式變化 781
鉆石繼承變動(dòng) 785
新式類(lèi)的擴(kuò)展 789
slots實(shí)例 789
類(lèi)特性 793
__getattribute__和描述符 795
元類(lèi) 795
靜態(tài)方法和類(lèi)方法 796
為什么使用特殊方法 796
Python 2.6和Python 3.0中的靜態(tài)方法 797
靜態(tài)方法替代方案 799
使用靜態(tài)和類(lèi)方法 800
使用靜態(tài)方法統(tǒng)計(jì)實(shí)例 801
用類(lèi)方法統(tǒng)計(jì)實(shí)例 802
裝飾器和元類(lèi):第一部分 805
函數(shù)裝飾器基礎(chǔ) 805
裝飾器例子 806
類(lèi)裝飾器和元類(lèi) 807
更多詳細(xì)信息 808
類(lèi)陷阱 809
修改類(lèi)屬性的副作用 809
修改可變的類(lèi)屬性也可能產(chǎn)生副作用 810
多重繼承:順序很重要 811
類(lèi)、方法以及嵌套作用域 812
Python中基于委托的類(lèi):__getattr__和內(nèi)置函數(shù) 814
“過(guò)度包裝” 814
本章小結(jié) 815
本章習(xí)題 815
習(xí)題解答 815
第六部分練習(xí)題 816
為什么要在意:大師眼中的OOP 821
第七部分 異常和工具
第32章 異常基礎(chǔ) 825
為什么使用異常 826
異常的角色 826
異常處理:簡(jiǎn)明扼要 827
默認(rèn)異常處理器 827
捕獲異常 828
引發(fā)異常 829
用戶定義的異常 830
終止行為 830
為什么要在意:錯(cuò)誤檢查 832
本章小結(jié) 833
本章習(xí)題 833
習(xí)題解答 834
第33章 異常編碼細(xì)節(jié) 835
try/except/else語(yǔ)句 835
try語(yǔ)句分句 836
try/else分句 839
例子:默認(rèn)行為 840
例子:捕捉內(nèi)置異常 841
try/finally語(yǔ)句 841
例子:利用try/finally編寫(xiě)終止行為 842
統(tǒng)一try/except/finally語(yǔ)句 843
統(tǒng)一try語(yǔ)句語(yǔ)法 845
通過(guò)嵌套合并finally和except 845
合并try的例子 846
raise語(yǔ)句 847
利用raise傳遞異常 849
Python 3.0異常鏈:raise from 849
assert語(yǔ)句 850
例子:收集約束條件(但不是錯(cuò)誤) 850
with/as環(huán)境管理器 851
基本使用 852
環(huán)境管理協(xié)議 853
本章小結(jié) 855
本章習(xí)題 855
習(xí)題解答 856
第34章 異常對(duì)象 857
異常:回到未來(lái) 858
字符串異常很簡(jiǎn)單 858
基于類(lèi)的異常 858
類(lèi)異常例子 859
為什么使用類(lèi)異常 861
內(nèi)置Exception類(lèi) 864
內(nèi)置異常分類(lèi) 865
默認(rèn)打印和狀態(tài) 866
定制打印顯示 867
定制數(shù)據(jù)和行為 868
提供異常細(xì)節(jié) 868
提供異常方法 869
本章小結(jié) 870
本章習(xí)題 870
習(xí)題解答 870
第35章 異常的設(shè)計(jì) 872
嵌套異常處理器 872
例子:控制流程嵌套 873
例子:語(yǔ)法嵌套化 874
異常的習(xí)慣用法 876
異常不總是錯(cuò)誤 876
函數(shù)信號(hào)條件和raise 876
關(guān)閉文件和服務(wù)器連接 877
在try外進(jìn)行調(diào)試 878
運(yùn)行進(jìn)程中的測(cè)試 879
關(guān)于sys.exc_info 879
與異常有關(guān)的技巧 880
應(yīng)該包裝什么 881
捕捉太多:避免空except語(yǔ)句 881
捕捉過(guò)少:使用基于類(lèi)的分類(lèi) 883
核心語(yǔ)言總結(jié) 884
Python工具集 884
大型項(xiàng)目的開(kāi)發(fā)工具 885
本章小結(jié) 888
第七部分練習(xí)題 889
第八部分 高級(jí)話題注1
第36章 Unicode和字節(jié)字符串 893
Python 3.0中的字符串修改 894
字符串基礎(chǔ)知識(shí) 895
字符編碼方法 895
Python的字符串類(lèi)型 897
文本和二進(jìn)制文件 899
Python 3.0中的字符串應(yīng)用 900
常量和基本屬性 900
轉(zhuǎn)換 901
編碼Unicode字符串 903
編碼ASCII文本 903
編碼非ASCII文本 904
編碼和解碼非ASCII文本 904
其他Unicode編碼技術(shù) 905
轉(zhuǎn)換編碼 907
在Python 2.6中編碼Unicode字符串 908
源文件字符集編碼聲明 910
使用Python 3.0 Bytes對(duì)象 911
方法調(diào)用 912
序列操作 913
創(chuàng)建bytes對(duì)象的其他方式 913
混合字符串類(lèi)型 914
使用Python 3.0(和Python 2.6)bytearray對(duì)象 915
使用文本文件和二進(jìn)制文件 918
文本文件基礎(chǔ) 919
Python 3.0中的文本和二進(jìn)制模式 919
類(lèi)型和內(nèi)容錯(cuò)誤匹配 921
使用Unicode文件 922
在Python 3.0中讀取和寫(xiě)入U(xiǎn)nicode 922
在Python 3.0中處理BOM 924
Python 2.6中的Unicode文件 927
Python 3.0中其他字符串工具的變化 927
re模式匹配模塊 927
Struct二進(jìn)制數(shù)據(jù)模塊 928
pickle對(duì)象序列化模塊 931
XML解析工具 932
本章小結(jié) 935
本章習(xí)題 935
習(xí)題解答 936
第37章 管理屬性 938
為什么管理屬性 938
插入在屬性訪問(wèn)時(shí)運(yùn)行的代碼 939
特性 940
基礎(chǔ)知識(shí) 940
第一個(gè)例子 941
計(jì)算的屬性 942
使用裝飾器編寫(xiě)特性 943
描述符 944
基礎(chǔ)知識(shí) 945
第一個(gè)示例 947
計(jì)算的屬性 949
在描述符中使用狀態(tài)信息 950
特性和描述符是如何相關(guān)的 952
__getattr__和__getattribute__ 953
基礎(chǔ)知識(shí) 954
第一個(gè)示例 956
計(jì)算屬性 958
__getattr__和__getattribute__比較 959
管理技術(shù)比較 960
攔截內(nèi)置操作屬性 963
重訪基于委托的Manager 967
示例:屬性驗(yàn)證 970
使用特性來(lái)驗(yàn)證 971
使用描述符驗(yàn)證 973
使用__getattr__來(lái)驗(yàn)證 974
使用__getattribute__驗(yàn)證 976
本章小結(jié) 977
本章習(xí)題 977
習(xí)題解答 977
第38章 裝飾器 979
什么是裝飾器 979
管理調(diào)用和實(shí)例 980
管理函數(shù)和類(lèi) 980
使用和定義裝飾器 981
為什么使用裝飾器 981
基礎(chǔ)知識(shí) 982
函數(shù)裝飾器 982
類(lèi)裝飾器 986
裝飾器嵌套 988
裝飾器參數(shù) 990
裝飾器管理函數(shù)和類(lèi) 991
編寫(xiě)函數(shù)裝飾器 991
跟蹤調(diào)用 992
狀態(tài)信息保持選項(xiàng) 993
類(lèi)錯(cuò)誤之一:裝飾類(lèi)方法 997
計(jì)時(shí)調(diào)用 1002
添加裝飾器參數(shù) 1004
編寫(xiě)類(lèi)裝飾器 1007
單體類(lèi) 1007
跟蹤對(duì)象接口 1009
類(lèi)錯(cuò)誤之二:保持多個(gè)實(shí)例 1012
裝飾器與管理器函數(shù)的關(guān)系 1013
為什么使用裝飾器(重訪) 1015
直接管理函數(shù)和類(lèi) 1016
示例:“私有”和“公有”屬性 1018
實(shí)現(xiàn)私有屬性 1019
實(shí)現(xiàn)細(xì)節(jié)之一 1021
公有聲明的泛化 1022
實(shí)現(xiàn)細(xì)節(jié)之二 1024
開(kāi)放問(wèn)題 1025
Python不是關(guān)于控制 1029
示例:驗(yàn)證函數(shù)參數(shù) 1030
目標(biāo) 1030
針對(duì)位置參數(shù)的一個(gè)基本范圍測(cè)試裝飾器 1031
針對(duì)關(guān)鍵字和默認(rèn)泛化 1033
實(shí)現(xiàn)細(xì)節(jié) 1036
開(kāi)放問(wèn)題 1038
裝飾器參數(shù) VS 函數(shù)注解 1039
其他應(yīng)用程序:類(lèi)型測(cè)試 1041
本章小結(jié) 1042
本章習(xí)題 1042
習(xí)題解答 1043
第39章 元類(lèi) 1046
要么是元類(lèi),要么不是元類(lèi) 1046
提高魔力層次 1047
“輔助”函數(shù)的缺點(diǎn) 1049
元類(lèi)與類(lèi)裝飾器的關(guān)系:第一回合 1051
元類(lèi)模型 1053
類(lèi)是類(lèi)型的實(shí)例 1053
元類(lèi)是Type的子類(lèi) 1055
Class語(yǔ)句協(xié)議 1056
聲明元類(lèi) 1057
編寫(xiě)元類(lèi) 1058
基本元類(lèi) 1058
定制構(gòu)建和初始化 1059
其他元類(lèi)編程技巧 1060
實(shí)例與繼承的關(guān)系 1063
示例:向類(lèi)添加方法 1064
手動(dòng)擴(kuò)展 1064
基于元類(lèi)的擴(kuò)展 1065
元類(lèi)與類(lèi)裝飾器的關(guān)系:第二回合 1067
示例:對(duì)方法應(yīng)用裝飾器 1070
用裝飾器手動(dòng)跟蹤 1070
用元類(lèi)和裝飾器跟蹤 1071
把任何裝飾器應(yīng)用于方法 1073
元類(lèi)與類(lèi)裝飾器的關(guān)系:第三回合 1074
“可選的”語(yǔ)言功能 1076
本章小結(jié) 1078
本章習(xí)題 1078
習(xí)題解答 1078
第九部分 附錄注2
附錄A 安裝和配置 1083
附錄B 各部分練習(xí)題的解答 1093