近來(lái)不以軟件開(kāi)發(fā)為專(zhuān)業(yè)的,也就是非工程師使用Python的情況漸漸增多。本書(shū)第四版將基礎(chǔ)講解部分大篇幅改寫(xiě)得更加易讀易懂,便于讀者入門(mén)。
本書(shū)是面向?qū)ο竽_本語(yǔ)言Python的入門(mén)書(shū)。Python是一種在美國(guó)、歐洲、包括日本在內(nèi)的亞洲各國(guó)廣為使用的一種程序設(shè)計(jì)語(yǔ)言。Python不僅簡(jiǎn)潔易懂,而且是一種可以在比較嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計(jì)中使用的語(yǔ)言。近年來(lái),在以機(jī)器學(xué)習(xí)與深度學(xué)習(xí)deep learning)為代表的人工智能基礎(chǔ)領(lǐng)域,或是數(shù)據(jù)科學(xué)(datascience)領(lǐng)域中,Python也作為一種常用的程序設(shè)計(jì)語(yǔ)言而被大家所關(guān)注。例如,Google(谷歌)、
Microsoft(微軟)等知名企業(yè)都在使用Python。
本書(shū)是第4版修訂版,從問(wèn)世以來(lái),已經(jīng)過(guò)了10年。
第1版出版是在2006年,當(dāng)時(shí)正是一種新的Web萌芽與腳本語(yǔ)言都廣受關(guān)注的時(shí)代。在歐美國(guó)家,知名的Web服務(wù)在開(kāi)發(fā)時(shí)使用Python的事例很多。但是在日本,Python還沒(méi)有很高的知名度。那時(shí)作為第一本Python日語(yǔ)書(shū),第1版主要是將Python的優(yōu)點(diǎn)廣泛傳達(dá)給了日本社會(huì)。
第2版出版時(shí),正處于云概念被廣泛接受的時(shí)代。以虛擬機(jī)監(jiān)視器Xen、Google的云服務(wù)(cloud
service)AppEngine為代表,在云領(lǐng)域中,Python也受到了廣泛關(guān)注。
在第3版中,以幾年前發(fā)布的Python 3為中心,大規(guī)模地修改了第2版。以L(fǎng)inux的包管理為代表,Python作為基礎(chǔ)被繼續(xù)使用。在第3版中,對(duì)革新后的新Python進(jìn)行了介紹。Python
3提高了一慣性,可以更安心、更長(zhǎng)久地使用。
接下來(lái)是第4版。第4版增加了有關(guān)近年來(lái)廣受關(guān)注的數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)的章節(jié)。另外,近來(lái)不以軟件開(kāi)發(fā)為專(zhuān)業(yè)的,也就是非工程師使用Python的情況漸漸增多。考慮到這一點(diǎn),本版將基礎(chǔ)講解部分大篇幅改寫(xiě)得更加易讀易懂。
回首這10年,我認(rèn)為Python是時(shí)常引導(dǎo)時(shí)代的先驅(qū)者。從Web開(kāi)始,云以及數(shù)據(jù)科學(xué)、人工智能等,Python總是開(kāi)啟新技術(shù)的起點(diǎn)。介紹這樣優(yōu)秀的Python,是本書(shū)最大的使命。
最后,要對(duì)審查本書(shū)的巖井雅治、太田芳行、奧野慎吾、kabihiko、木村明治、鄉(xiāng)田mariko、櫻井駿、鈴木潤(rùn)、高田美紀(jì)、高野隆一、中村讓、minakawamisaki、通口千洋、福島真太郎、松澤太郎(50音順序),以及本書(shū)的編輯、參與本書(shū)出版工作的所有工作人員表達(dá)最真摯的謝意。
同時(shí)也希望,通過(guò)本書(shū),能有更多的人喜愛(ài)Python,喜愛(ài)indent。
寫(xiě)給最深?lèi)?ài)的妻子、兒子、女兒和狗狗,同時(shí)也寫(xiě)給10年后的自己
柴田淳,2000年初起開(kāi)始運(yùn)用Python進(jìn)行軟件系統(tǒng)的委托開(kāi)發(fā),參與大型網(wǎng)站和出版社的CRM、谷歌推廣網(wǎng)站的后臺(tái)等的開(kāi)發(fā)。目前專(zhuān)注于公司服務(wù)系統(tǒng)的開(kāi)發(fā)和運(yùn)營(yíng)。
第1章 程序設(shè)計(jì)語(yǔ)言Python 1
1.1
Python的魅力 1
1.1.1
Python很容易記憶 2
1.1.2
Python很容易使用 3
1.1.3
Python有廣闊的前景 4
1.2
Python(Anaconda)的下載和安裝… 6
1.2.1
什么是Anaconda
6
1.2.2
必要的學(xué)習(xí)環(huán)境7
1.2.3
在 Windows系統(tǒng)中安裝Anaconda 8
1.2.4
在macOS(OS X)系統(tǒng)中安裝Anaconda
9
1.2.5
在Linux系統(tǒng)中安裝
Anaconda 10
1.2.6
已經(jīng)安裝Python的情況 11
1.2.7
安裝本家版Python
11
1.3
交互式腳本(對(duì)話(huà)型腳本) 13
1.3.1
在 Windows系統(tǒng)中啟動(dòng)交互式腳本 13
1.3.2
在 macOS、Linux系統(tǒng)中啟動(dòng)交互式腳本14
1.3.3
輸入Python代碼15
1.3.4
關(guān)閉交互式腳本20
1.4
在文件中編寫(xiě)Python程序 20
1.4.1
使用Editor(編輯器)編寫(xiě)程序21
1.4.2
保存Python程序 21
1.4.3
在 Windows系統(tǒng)中運(yùn)行Python的腳本文件22
1.4.4
在 macOS、Linux系統(tǒng)中執(zhí)行Python的腳本文件
23
1.4.5
推薦的編輯器和選擇方法24
1.5
使用Jupyter Notebook 26
1.5.1
在 Windows、macOS系統(tǒng)中啟動(dòng)內(nèi)核 28
1.5.2
在Linux系統(tǒng)中啟動(dòng)內(nèi)核 28
1.5.3
使用主面板29
1.5.4
制作Notebook29
1.5.5
使用Notebook運(yùn)行程序 30
1.5.6
保存Notebook 32
1.5.7
結(jié)束Notebook
33
1.5.8
使用Jupyter Notebook的tmpnb 33
1.5.9
示例代碼的運(yùn)行方法34
第2章 用Python開(kāi)始程序設(shè)計(jì)36
2.1
使用數(shù)值36
2.1.1
使用數(shù)值的四則運(yùn)算37
2.1.2
四則運(yùn)算和優(yōu)先順序38
2.2
使用變量38
2.2.1
定義變量38
2.2.2
使用變量進(jìn)行計(jì)算39
2.3
使用字符串41
2.3.1
定義字符串41
2.3.2
字符串的連接42
2.3.3
復(fù)合運(yùn)算符43
2.3.4
統(tǒng)一類(lèi)型的Python風(fēng)格 44
2.3.5
字符串與數(shù)值的轉(zhuǎn)換(類(lèi)型轉(zhuǎn)換) 45
2.4
使用列表47
2.4.1
定義列表47
2.4.2
指定索引取出元素48
2.4.3
列表的連接50
2.4.4
元素的置換和刪除50
2.4.5
使用切片取出多個(gè)元素52
2.4.6
列表的列表二維數(shù)組53
2.4.7
列表的合計(jì)、最大值和最小值55
2.4.8
查看列表長(zhǎng)度56
2.5
用for語(yǔ)句進(jìn)行循環(huán)操作 57
2.6
用if語(yǔ)句進(jìn)行條件分支 61
2.6.1
比較數(shù)值63
2.6.2
比較字符串63
2.6.3
檢索字符串64
2.6.4
比較列表64
2.6.5
檢索列表元素65
2.6.6
使用else語(yǔ)句 65
2.7
使用函數(shù)69
2.7.1
什么是函數(shù)69
2.7.2
調(diào)用函數(shù)70
2.7.3
函數(shù)的參數(shù)70
2.7.4
函數(shù)的返回值(1) 71
2.7.5
定義函數(shù)72
2.7.6
定義參數(shù)74
2.7.7
函數(shù)的返回值(2) 75
2.7.8
本地變量76
2.8
使用模塊79
2.8.1
導(dǎo)入模塊80
2.8.2
import語(yǔ)句的as 81
2.8.3
使用了from的導(dǎo)入 81
2.8.4
模塊的查找方法82
第3章 掌握Python的基礎(chǔ)83
3.1
使用字典83
3.1.1
什么是字典83
3.1.2
使用鍵取出元素84
3.1.3
使用鍵替換元素85
3.1.4
添加新的鍵與值86
3.1.5
使用鍵刪除元素87
3.1.6
確認(rèn)鍵的存在88
3.1.7
使用鍵的循環(huán)89
3.2
使用set(集合) 90
3.2.1
定義set 91
3.2.2
求set的并集 91
3.2.3
求set的差集 92
3.2.4
求set的交集 92
3.2.5
求set的異或 93
3.2.6
set與列表 94
3.2.7
set與比較 94
3.3
使用元組95
3.4
if語(yǔ)句的應(yīng)用99
3.4.1
比較運(yùn)算符99
3.4.2
比較運(yùn)算符與True和False 99
3.4.3
關(guān)于比較的備忘錄
100
3.4.4
復(fù)雜的比較邏輯運(yùn)算
100
3.5
循環(huán)的應(yīng)用
101
3.5.1
使用while語(yǔ)句制作循環(huán) 101
3.5.2
使用了break語(yǔ)句和continue語(yǔ)句的循環(huán)控制 103
3.5.3
循環(huán)的else
105
3.6
函數(shù)的應(yīng)用
105
3.6.1
對(duì)函數(shù)定義默認(rèn)參數(shù)
106
3.6.2
參數(shù)的關(guān)鍵字指定
107
3.6.3
函數(shù)和本地變量
108
第4章 熟練使用內(nèi)置類(lèi)型111
4.1
作為對(duì)象的內(nèi)置類(lèi)型概述
111
4.1.1
什么是方法 111
4.1.2
作為對(duì)象的內(nèi)置類(lèi)型
113
4.1.3
內(nèi)置的數(shù)據(jù)類(lèi)型一覽
114
4.1.4
數(shù)據(jù)類(lèi)型的分類(lèi)
116
4.1.5
序 列 116
4.1.6
可更改和不可更改
117
4.1.7
set類(lèi)型和字典類(lèi)型117
4.2
操作數(shù)值類(lèi)型
118
4.2.1
十六進(jìn)制的表示方法
118
4.2.2
二進(jìn)制的表示方法119
4.2.3
八進(jìn)制的表示方法
120
4.2.4
位運(yùn)算 121
4.3
熟練使用字符串類(lèi)型
121
4.3.1
字符串的替換和刪除 121
4.3.2
split()方法和join()方法 122
4.3.3
轉(zhuǎn)義序列 124
4.3.4
raw字符串 126
4.3.5
字符串中可以使用的方法
126
4.3.6
字符串的格式化
128
4.4
熟練掌握列表類(lèi)型和元組類(lèi)型
132
4.4.1
給列表排序
132
4.4.2
自定義排列順序
133
4.4.3
解包代入 134
4.4.4
切片的步長(zhǎng)數(shù)
135
4.4.5
使用了切片元素的代入和刪除135
4.4.6
列表中可以使用的方法 136
4.5
熟練使用set類(lèi)型 137
4.6
熟練掌握字典類(lèi)型
138
4.6.1
通過(guò)序列等制作字典
138
4.6.2
將兩個(gè)字典進(jìn)行組合
139
4.6.3
巧妙處理字典的鍵
139
4.6.4
靈活運(yùn)用字典中的方法 140
4.7
if語(yǔ)句和內(nèi)置類(lèi)型142
4.8
for語(yǔ)句和內(nèi)置類(lèi)型142
4.8.1
熟練使用range()函數(shù) 142
4.8.2
序列和循環(huán)計(jì)數(shù)器143
4.8.3
使用兩個(gè)序列的循環(huán)
144
4.9
函數(shù)和內(nèi)置類(lèi)型
145
4.9.1
返回值和解包代入
145
4.9.2
在函數(shù)中接收參數(shù)列表
146
4.9.3
在函數(shù)中接收關(guān)鍵字參數(shù)
147
4.10
Python的字符串和日語(yǔ)
147
4.10.1
有關(guān)字符編碼的基礎(chǔ)知識(shí)147
4.10.2
Python和 Unicode
150
4.10.3
字節(jié)類(lèi)型150
4.10.4
字符串向字節(jié)類(lèi)型轉(zhuǎn)換152
4.10.5
字節(jié)類(lèi)型向字符串類(lèi)型轉(zhuǎn)換153
4.10.6
腳本文件的編碼指定153
4.10.7
編碼的判斷154
4.10.8
編碼和亂碼154
4.10.9
多字節(jié)字符和字符的分界156
4.11
Python的文件處理
156
4.11.1
文件和文件對(duì)象158
4.11.2
從文件中讀取160
4.11.3
寫(xiě)入文件162
4.11.4
處理二進(jìn)制文件162
4.11.5
文件名稱(chēng)的處理163
第5章 Python與函數(shù)式程序設(shè)計(jì) 165
5.1
什么是函數(shù)式程序設(shè)計(jì)
165
5.1.1
Python的語(yǔ)句和表達(dá)式 167
5.1.2
Lambda表達(dá)式 167
5.2
解析式 168
5.2.1
列表解析式 169
5.2.2
列表解析式的詳細(xì)介紹 169
5.2.3
在列表解析式中使用if
170
5.2.4
字典解析式
171
5.2.5
set解析式172
5.3
使用迭代 172
5.3.1
什么是迭代
172
5.3.2
迭代和延遲評(píng)價(jià)
173
5.4
使用生成器
175
5.4.1
定義生成器函數(shù)
176
5.4.2
生成器表達(dá)式
176
5.5
高階函數(shù)和裝飾器177
5.5.1
高階函數(shù) 177
5.5.2
裝飾器 179
第6章 類(lèi)與面向?qū)ο箝_(kāi)發(fā)181
6.1
在Python中使用類(lèi)181
6.1.1
對(duì)象和類(lèi) 181
6.1.2
由類(lèi)制作對(duì)象(實(shí)例) 182
6.1.3
使用實(shí)例 183
6.1.4
對(duì)象和實(shí)例183
6.2
制作類(lèi)184
6.2.1
定義類(lèi) 185
6.2.2
實(shí)例的屬性
185
6.2.3
方法的定義與初始化方法__init__()
187
6.2.4
方法與第一參數(shù)self 188
6.2.5
屬性的隱蔽性
192
第7章 類(lèi)的繼承與高級(jí)面向?qū)ο蠊δ?94
7.1
繼承類(lèi) 194
7.1.1
指定超類(lèi) 195
7.1.2
方法的重寫(xiě)
195
7.1.3
初始化方法的重寫(xiě)
196
7.1.4
得到使用super()的超類(lèi) 197
7.1.5
插 槽 198
7.1.6
特 征 199
7.2
使用特殊方法
200
7.3
繼承內(nèi)置類(lèi)型
206
第8章 模 塊209
8.1
創(chuàng)建模塊文件夾
209
8.1.1
導(dǎo)入模塊時(shí)的操作
210
8.1.2
僅在執(zhí)行文件時(shí)執(zhí)行的塊
211
8.1.3
類(lèi)與模塊 212
8.2
模塊的層次(包) 213
8.2.1
包的本質(zhì) 213
8.2.2
創(chuàng)建包 214
8.3
使用模塊時(shí)的注意事項(xiàng)
214
8.3.1
使用from語(yǔ)句導(dǎo)入的弊端 214
8.3.2
模塊的搜索順序
214
8.4
使用第三方模塊
215
8.4.1
模塊的搜尋方法 215
8.4.2
使用pip安裝模塊 216
8.4.3
使用conda安裝模塊 217
8.4.4
模塊的種類(lèi) 217
8.4.5
手動(dòng)安裝模塊
218
8.4.6
模塊的設(shè)置場(chǎng)所和Python的版本 218
第9章 作用域與對(duì)象221
9.1
命名空間、作用域221
9.1.1
作用域的規(guī)則
222
9.1.2
類(lèi)、實(shí)例的作用域224
9.2
純粹面向?qū)ο笳Z(yǔ)言Python
225
9.2.1
對(duì)象與屬性
225
9.2.2
魔法函數(shù)dir()226
9.2.3
作為屬性的方法
227
9.2.4
全部都是對(duì)象
228
9.2.5
對(duì)象與類(lèi)型228
9.2.6
對(duì)象與屬性
230
9.2.7
類(lèi)、模塊與屬性231
9.2.8
對(duì)象和變量
231
9.2.9
對(duì)象與命名空間
232
第10章 異常處理
234
10.1
Python的異常處理
234
10.1.1
異常的發(fā)生234
10.1.2
捕獲異常235
10.1.3
with語(yǔ)句 237
10.1.4
異常與追溯237
10.1.5
引發(fā)(raise)異常238
10.1.6
顯示追溯238
10.2
常見(jiàn)錯(cuò)誤或異常與對(duì)策239
10.2.1
讀取程序時(shí)發(fā)生的錯(cuò)誤(SyntaxError) 240
10.2.2
程序執(zhí)行中發(fā)生的錯(cuò)誤(Exception) 240
第11章 使用標(biāo)準(zhǔn)庫(kù)
243
11.1
標(biāo)準(zhǔn)庫(kù)的導(dǎo)入243
11.2
數(shù)據(jù)結(jié)構(gòu)244
11.2.1
保持添加時(shí)順序的collections.OrderedDict 244
11.2.2
帶有默認(rèn)值的字典collections.defaultdict 245
11.2.3
協(xié)助列表sort的bisect 246
11.3
處理日期數(shù)據(jù)的datetime、calendar 247
11.3.1
日期與時(shí)刻和字符串249
11.3.2
日期與時(shí)刻的運(yùn)算和比較250
11.3.3
使用datetime.date類(lèi)的方法 251
11.3.4
使用datetime.datetime類(lèi)的方法 252
11.3.5
使用calendar模塊 252
11.4
正則表達(dá)式re 254
11.4.1
re模塊 254
11.4.2
Python的正則表達(dá)式
255
11.4.3
正則表達(dá)式的pattern字符串 255
11.4.4
使用正則表達(dá)式對(duì)象257
11.4.5
將模式傳遞給參數(shù),進(jìn)行正則表達(dá)式的處理 259
11.4.6
使用匹配對(duì)象260
11.4.7
正則表達(dá)式的示例261
11.5
獲取操作系統(tǒng)參數(shù)的sys 261
11.5.1
獲取命令行的參數(shù)261
11.5.2
程序的結(jié)束262
11.5.3
其他函數(shù)與變量262
11.6
獲得及操作文件、進(jìn)程等依賴(lài) OS信息的OS 262
11.6.1
獲取、操作與進(jìn)程相關(guān)的信息
262
11.6.2
文件與目錄的操作263
11.6.3
進(jìn)程管理265
11.6.4
在交換平臺(tái)使用了路徑的操作266
11.7
使用數(shù)學(xué)函數(shù)mathrandom 267
11.7.1
math數(shù)學(xué)函數(shù)模塊
267
11.7.2
random生成隨機(jī)數(shù)
269
11.8
獲取因特網(wǎng)上數(shù)據(jù)的urllib 270
11.8.1
從 Web或FTP中獲取文件271
11.8.2
使用request.urlretrieve()函數(shù)的示例代碼 271
11.8.3
從 Web或FTP中讀取數(shù)據(jù)272
11.8.4
在urlopen()返回的對(duì)象中可以使用的方法 272
11.8.5
BASIC認(rèn)證 273
11.8.6
用POST方式傳輸數(shù)據(jù) 274
11.8.7
其他函數(shù)275
11.9
創(chuàng)建字符串庫(kù)虛擬文件的io.StringIO 276
11.10
CSV(逗號(hào)分隔值)文件的操作 277
11.11
對(duì)象持久化與序列化shelvepickle 278
11.11.1
將字典持久化的shelve 279
11.11.2
執(zhí)行對(duì)象持久化與序列化的pickle 280
11.12
處理JSON數(shù)據(jù)的json 282
11.12.1
將JSON轉(zhuǎn)換為Python的數(shù)據(jù)類(lèi)型283
11.12.2
Python的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為JSON
283
11.12.3
json的使用示例
284
第12章 Python與數(shù)據(jù)科學(xué) 285
12.1
NumPy與 matplotlib
285
12.1.1
所謂的 NumPy與
matplotlib 285
12.1.2
使用NumPy 287
12.1.3
使用 matplotlib 290
12.2
使用NumPy
291
12.2.1
生成NumPy的array 291
12.2.2
使用數(shù)組的運(yùn)算293
12.2.3
訪(fǎng)問(wèn)元素295
12.2.4
數(shù)組的連接295
12.2.5
復(fù)制數(shù)組296
12.3
使用 matplotlib 296
12.3.1
使用plot()來(lái)繪制圖表297
12.3.2
控制plot()的繪制299
12.3.3
加入字符300
12.4
將日本的人口可視化300
12.4.1
讀取人口數(shù)據(jù)301
12.4.2
繪制人口金字塔303
12.4.3
將圖表繪制在交互式中304
12.4.4
推算未來(lái)人口數(shù)量306
12.5
Python與機(jī)器學(xué)習(xí)
310
12.5.1
用機(jī)器學(xué)習(xí)進(jìn)行數(shù)值的預(yù)測(cè)311
12.5.2
機(jī)器學(xué)習(xí)的算法315
12.5.3
由姓名來(lái)判定性別316
12.5.4
機(jī)器學(xué)習(xí)、數(shù)據(jù)科學(xué)與Python 320
12.5.5
深度學(xué)習(xí)的登場(chǎng)和未來(lái)321
第13章 Python 2 323
13.1
Python 3與Python 2的不同點(diǎn)323
13.1.1
在Python 3中被削減掉的功能 324
13.1.2
在Python 2.7中可以使用的Python
3功能 324
13.1.3
在Python 3中改變了的功能 325
13.1.4
模塊的再配置、名稱(chēng)變更
329
13.2
從Python 2到Python 3的遷移 330
13.3
結(jié)束語(yǔ)331