Python 語言及其應用, 2/e Introducing Python: Modern Computing in Simple Packages, 2/e

Bill Lubanovic

  • Python 語言及其應用, 2/e-preview-1
  • Python 語言及其應用, 2/e-preview-2
Python 語言及其應用, 2/e-preview-1

商品描述

本書分為上、下兩大部分,共計22章。第一部分(第1~11章)由淺入深地介紹Python的基礎知識,包括變量、數值、條件語句、文本字符串、循環語句、元組、列表、字典、集合、函數、對象、類、模塊、庫,等等。掌握這些基礎知識將為運用Python奠定牢固的基礎。第二部分(第12~22章)介紹Python的應用,所涉及的領域包括Web應用、數據庫、網絡和機器學習。你將學會用Python處理時間、進行網絡通信、完成數據科學任務等,還會瞭解並發的相關知識。

作者簡介

比尔·卢巴诺维奇(Bill Lubanovic)在长达40余年的软件开发生涯中积累了丰富的实战经验,开发过的项目跨越数据库、Web、分布式系统等多个领域。他曾负责用Python重新实现流行工具Wayback Machine。

目錄大綱

前言 xxv

第 一部分 Python基礎

第 1 章 Python初探 3

1.1 謎題 3

1.2 小程序 5

1.3 大程序 7

1.4 現實世界中的Python 10

1.5 Python和其他語言 10

1.6 為什麽選擇Python 12

1.7 為什麽不選擇Python 14

1.8 Python 2和Python 3 14

1.9 安裝Python 15

1.10 運行Python 15

1.10.1 使用交互式解釋器 15

1.10.2 使用Python文件 16

1.10.3 下一步 17

1.11 禪意時刻 17

1.12 後續內容 17

1.13 練習 18

第 2 章 數據:類型、值、變量和名稱 19

2.1 Python數據皆是對象 19

2.2 類型 20

2.3 可變性 21

2.4 字面值 22

2.5 變量 22

2.6 賦值 23

2.7 變量是名稱,不是位置 24

2.8 向多個名稱賦值 27

2.9 為名稱重新賦值 27

2.10 復制 27

2.11 選個好變量名 28

2.12 後續內容 28

2.13 練習 28

第 3 章 數字 29

3.1 布爾值 29

3.2 整數 30

3.2.1 字面整數 30

3.2.2 整數運算符 31

3.2.3 整數和變量 33

3.2.4 優先級 34

3.2.5 基數 35

3.2.6 類型轉換 37

3.2.7 int類型有多大 39

3.3 浮點數 40

3.4 數學函數 41

3.5 後續內容 41

3.6 練習 41

第 4 章 if語句 42

4.1 使用#註釋 42

4.2 使用\續行 43

4.3 使用if、elif和else進行比較 44

4.4 True是什麽 46

4.5 使用in進行多重比較 47

4.6 新秀:我是海象 48

4.7 後續內容 49

4.8 練習 49

第 5 章 字符串 50

5.1 使用引號創建字符串 50

5.2 使用str()創建字符串 52

5.3 使用\轉義 53

5.4 使用+拼接 54

5.5 使用*重復 55

5.6 使用[]獲取字符 55

5.7 使用分片提取子串 56

5.8 使用len()獲取字符串長度 58

5.9 使用split()分割字符串 58

5.10 使用join()合並字符串 59

5.11 使用replace()進行替換 59

5.12 使用strip()進行剝離 59

5.13 搜索和選擇 60

5.14 大小寫 62

5.15 對齊 63

5.16 格式化 63

5.16.1 舊式樣:% 63

5.16.2 新式樣:{}和format() 66

5.16.3 最新式樣:f字符串 67

5.17 未完待續 68

5.18 後續內容 68

5.19 練習 68

第 6 章 while循環和for循環 70

6.1 while循環 70

6.1.1 使用break跳出循環 71

6.1.2 使用continue跳過本次循環 71

6.1.3 使用else檢查break 71

6.2 使用for和in進行迭代 72

6.2.1 使用break跳出循環 73

6.2.2 使用continue跳過本次循環 73

6.2.3 使用else檢查break 73

6.2.4 使用range()生成數字序列 74

6.3 其他迭代器 74

6.4 後續內容 74

6.5 練習 74

第 7 章 元組和列表 76

7.1 元組 76

7.1.1 使用逗號和()創建元組 77

7.1.2 使用tuple()創建元組 78

7.1.3 使用+拼接元組 78

7.1.4 使用*復制元素 78

7.1.5 比較元組 78

7.1.6 使用for和in迭代元組 79

7.1.7 修改元組 79

7.2 列表 80

7.2.1 使用[]創建列表 80

7.2.2 使用list()創建或轉換列表 80

7.2.3 使用split()從字符串創建列表 80

7.2.4 使用[offset]獲取列表項 81

7.2.5 使用切片獲取列表項 82

7.2.6 使用append()在末尾添加列表項 82

7.2.7 使用insert()按偏移插入列表項 83

7.2.8 使用*復制所有列表項 83

7.2.9 使用extend()或+拼接列表 83

7.2.10 使用[offset]修改列表項 84

7.2.11 使用切片修改列表項 84

7.2.12 使用del按偏移刪除列表項 85

7.2.13 使用remove()按值刪除列表項 85

7.2.14 使用pop()按偏移獲取列表項並刪除 85

7.2.15 使用clear()刪除所有列表項 86

7.2.16 使用index()按值查找列表項的偏移 86

7.2.17 使用in測試值 86

7.2.18 使用count()統計某個值出現的次數 87

7.2.19 使用join()將列表轉換為字符串 87

7.2.20 使用sort()或sorted()重新排序列表項 87

7.2.21 使用len()獲得列表長度 88

7.2.22 使用=賦值 88

7.2.23 使用copy()、list()或切片復制列表 89

7.2.24 使用deepcopy()復制所有內容 89

7.2.25 比較列表 90

7.2.26 使用for和in迭代列表 91

7.2.27 使用zip()迭代多個序列 92

7.2.28 使用推導式創建列表 92

7.2.29 列表的列表 95

7.3 元組和列表 95

7.4 不存在元組推導式 95

7.5 後續內容 96

7.6 練習 96

第 8 章 字典和集合 98

8.1 字典 98

8.1.1 使用{}創建字典 98

8.1.2 使用dict()創建字典 99

8.1.3 使用dict()進行轉換 99

8.1.4 使用[key]添加或修改字典項 100

8.1.5 使用[key]或get()獲取字典項 101

8.1.6 使用keys()獲取所有的鍵 102

8.1.7 使用values()獲取所有值 102

8.1.8 使用items()獲取所有“鍵–值”對 102

8.1.9 使用len()獲取長度 103

8.1.10 使用{**a, **b}合並字典 103

8.1.11 使用update()合並字典 103

8.1.12 使用del按鍵刪除字典項 104

8.1.13 使用pop()按鍵獲取字典項並將其刪除 104

8.1.14 使用clear()刪除所有字典項 105

8.1.15 使用in測試鍵是否存在 105

8.1.16 使用=賦值 105

8.1.17 使用copy()復制 105

8.1.18 使用deepcopy()復制所有內容 106

8.1.19 比較字典 107

8.1.20 使用for和in迭代字典 107

8.1.21 字典推導式 108

8.2 集合 109

8.2.1 使用set()創建集合 110

8.2.2 使用set()進行轉換 110

8.2.3 使用len()獲取集合元素個數 111

8.2.4 使用add()添加元素 111

8.2.5 使用remove()刪除元素 111

8.2.6 使用for和in迭代集合 111

8.2.7 使用in測試元素 111

8.2.8 集合運算 112

8.2.9 集合推導式 115

8.2.10 使用frozenset()創建不可變集合 115

8.3 目前為止學過的數據結構 116

8.4 創建更復雜的數據結構 116

8.5 後續內容 117

8.6 練習 117

第 9 章 函數 119

9.1 使用def定義函數 119

9.2 使用圓括號調用函數 120

9.3 實參與形參 120

9.3.1 有用的None 122

9.3.2 位置實參 123

9.3.3 關鍵字實參 123

9.3.4 指定默認形參值 124

9.3.5 使用*拆分/匯集位置實參 125

9.3.6 使用**拆分/匯集關鍵字實參 126

9.3.7 僅關鍵字形參 127

9.3.8 可變實參和不可變實參 128

9.4 文檔字符串 128

9.5 作為“頭等公民”的函數 129

9.6 內部函數 131

9.7 匿名函數:lambda 132

9.8 生成器 133

9.8.1 生成器函數 134

9.8.2 生成器推導式 134

9.9 裝飾器 135

9.10 名稱空間和作用域 137

9.11 名稱中_和__的用法 139

9.12 遞歸 139

9.13 異步函數 140

9.14 異常 140

9.14.1 使用try和except處理錯誤 141

9.14.2 編寫自己的異常 142

9.15 後續內容 143

9.16 練習 143

第 10 章 對象和類 144

10.1 什麽是對象 144

10.2 簡單對象 145

10.2.1 使用class定義類 145

10.2.2 特性 145

10.2.3 方法 146

10.2.4 初始化 147

10.3 繼承 148

10.3.1 從父類繼承 148

10.3.2 覆蓋方法 149

10.3.3 添加方法 150

10.3.4 使用super()獲得父類的幫助 151

10.3.5 多重繼承 152

10.3.6 mixin 153

10.4 為self正名 154

10.5 特性訪問 154

10.5.1 直接訪問 154

10.5.2 getter和setter 155

10.5.3 用於特性訪問的屬性 155

10.5.4 計算值屬性 157

10.5.5 使用名稱重整保護內部隱私 158

10.5.6 類和對象特性 158

10.6 方法的類型 159

10.6.1 實例方法 159

10.6.2 類方法 159

10.6.3 靜態方法 160

10.7 鴨子類型 160

10.8 魔術方法 162

10.9 聚合和組合 165

10.10 何時使用對象或其他東西 166

10.11 具名元組 166

10.12 數據類 168

10.13 attrs 169

10.14 後續內容 169

10.15 練習 169

第 11 章 模塊、包和贈品 170

11.1 模塊和import語句 170

11.1.1 導入模塊 170

11.1.2 使用別名導入模塊 172

11.1.3 導入部分模塊 172

11.2 包 172

11.2.1 模塊搜索路徑 174

11.2.2 相對導入和絕對導入 174

11.2.3 名稱空間包 175

11.2.4 模塊和對象 176

11.3 Python標準庫 176

11.3.1 使用setdefault()和defaultdict()處理缺失的鍵 177

11.3.2 使用Counter()計數 178

11.3.3 使用OrderedDict()按鍵排序 179

11.3.4 棧+隊列=雙端隊列 180

11.3.5 使用itertools迭代代碼結構 181

11.3.6 使用pprint()美化輸出 182

11.3.7 獲得隨機數 182

11.4 獲取其他Python代碼 184

11.5 後續內容 184

11.6 練習 184

第二部分 Python實踐

第 12 章 數據處理 187

12.1 文本字符串:Unicode 188

12.1.1 Python 3 Unicode字符串 188

12.1.2 UTF-8 191

12.1.3 編碼 191

12.1.4 解碼 192

12.1.5 HTML實體 194

12.1.6 歸一化 195

12.1.7 更多信息 196

12.2 字符串:正則表達式 196

12.2.1 使用match()查找起始匹配 197

12.2.2 使用search()查找首次匹配 198

12.2.3 使用findall()查找所有匹配 198

12.2.4 使用split()在匹配處分割 199

12.2.5 使用sub()替換匹配 199

12.2.6 模式:特殊字符 199

12.2.7 模式:使用修飾符 201

12.2.8 模式:指定match()的輸出 203

12.3 二進制數據 203

12.3.1 bytes和bytearray 204

12.3.2 使用struct轉換二進制數據 205

12.3.3 其他二進制數據工具 207

12.3.4 使用binascii()轉換二進制/字符串 208

12.3.5 位運算符 208

12.4 珠寶類比 209

12.5 後續內容 209

12.6 練習 209

第 13 章 日歷和時鐘 211

13.1 閏年 212

13.2 datetime模塊 212

13.3 使用time模塊 215

13.4 讀寫日期和時間 216

13.5 所有的轉換 220

13.6 替代模塊 220

13.7 後續內容 221

13.8 練習 221

第 14 章 文件和目錄 222

14.1 文件輸入和輸出 222

14.1.1 使用open()創建或打開文件 222

14.1.2 使用print()寫入文本文件 223

14.1.3 使用write()寫入文本文件 223

14.1.4 使用read()、readline()或readlines()讀取文本文件 225

14.1.5 使用write()寫入二進制文件 226

14.1.6 使用read()讀取二進制文件 227

14.1.7 使用with自動關閉文件 227

14.1.8 使用seek()改變文件位置 228

14.2 內存映射 229

14.3 文件操作 229

14.3.1 使用exists()檢查文件是否存在 230

14.3.2 使用isfile()檢查文件類型 230

14.3.3 使用copy()復制文件 231

14.3.4 使用rename()重命名 231

14.3.5 使用link()或symlink()創建鏈接 231

14.3.6 使用chmod()改變文件權限 231

14.3.7 使用chown()改變文件所屬權 232

14.3.8 使用remove()刪除文件 232

14.4 目錄操作 232

14.4.1 使用mkdir()創建目錄 232

14.4.2 使用rmdir()刪除目錄 232

14.4.3 使用listdir()列出目錄內容 232

14.4.4 使用chdir()改變當前目錄 233

14.4.5 使用glob()列出匹配文件 233

14.5 路徑名 234

14.5.1 使用abspath()獲取路徑名 235

14.5.2 使用realpath()獲取符號鏈接路徑名 235

14.5.3 使用os.path.join()構建路徑名 235

14.5.4 使用pathlib 235

14.6 BytesIO和StringIO 236

14.7 後續內容 237

14.8 練習 237

第 15 章 進程和並發 238

15.1 程序和進程 238

15.1.1 使用subprocess創建進程 239

15.1.2 使用multiprocessing創建進程 240

15.1.3 使用terminate()終止進程 241

15.1.4 使用os獲得系統信息 241

15.1.5 使用psutil獲取進程信息 242

15.2 命令自動化 242

15.2.1 invoke 243

15.2.2 其他命令助手 243

15.3 並發 244

15.3.1 隊列 245

15.3.2 進程 245

15.3.3 線程 246

15.3.4 concurrent.futures 248

15.3.5 綠色線程和gevent 251

15.3.6 twisted 252

15.3.7 asyncio 254

15.3.8 Redis 254

15.3.9 隊列之外的選擇 257

15.4 後續內容 257

15.5 練習 257

第 16 章 持久性存儲 258

16.1 平面文本文件 258

16.2 填充式文本文件 258

16.3 表格式文本文件 259

16.3.1 CSV 259

16.3.2 XML 261

16.3.3 XML安全提示 263

16.3.4 HTML 263

16.3.5 JSON 264

16.3.6 YAML 266

16.3.7 tablib 267

16.3.8 Pandas 267

16.3.9 配置文件 268

16.4 二進制文件 269

16.4.1 填充式二進制文件和內存映射 269

16.4.2 電子表格 270

16.4.3 HDF5 270

16.4.4 TileDB 270

16.5 關系數據庫 270

16.5.1 SQL 271

16.5.2 DB-API 272

16.5.3 SQLite 273

16.5.4 MySQL 274

16.5.5 PostgreSQL 275

16.5.6 SQLAlchemy 275

16.5.7 其他數據庫訪問包 280

16.6 NoSQL數據存儲 280

16.6.1 dbm家族 280

16.6.2 memcached 281

16.6.3 Redis 282

16.6.4 文檔數據庫 288

16.6.5 時間序列數據庫 289

16.6.6 圖數據庫 289

16.6.7 其他NoSQL 289

16.7 全文數據庫 290

16.8 後續內容 290

16.9 練習 290

第 17 章 網絡 292

17.1 TCP/IP 292

17.1.1 套接字 293

17.1.2 Scapy 297

17.1.3 Netcat 297

17.2 聯網模式 297

17.3 “請求–回應”模式 298

17.3.1 ZeroMQ 298

17.3.2 其他消息工具 301

17.4 “發布–訂閱”模式 302

17.4.1 Redis 302

17.4.2 ZeroMQ 303

17.4.3 其他“發布–訂閱”工具 305

17.5 互聯網服務 305

17.5.1 域名系統 305

17.5.2 Python電子郵件模塊 306

17.5.3 其他協議 306

17.6 Web服務和API 306

17.7 數據序列化 307

17.7.1 使用pickle進行序列化 307

17.7.2 其他序列化格式 308

17.8 遠程過程調用 309

17.8.1 XML-RPC 309

17.8.2 JSON-RPC 310

17.8.3 MessagePack-RPC 311

17.8.4 zerorpc 312

17.8.5 gRPC 312

17.8.6 twirp 313

17.9 遠程管理工具 313

17.10 大數據 313

17.10.1 Hadoop 314

17.10.2 Spark 314

17.10.3 Disco 314

17.10.4 Dask 314

17.11 雲 315

17.11.1 Amazon Web服務 316

17.11.2 Google Cloud 316

17.11.3 Microsoft Azure 316

17.11.4 OpenStack 316

17.12 Docker 316

17.13 後續內容 317

17.14 練習 317

第 18 章 Web 318

18.1 Web客戶端 319

18.1.1 使用telnet進行測試 320

18.1.2 使用curl進行測試 321

18.1.3 使用httpie進行測試 322

18.1.4 使用httpbin進行測試 322

18.1.5 Python的標準Web庫 322

18.1.6 標準庫之外的requests 324

18.2 Web服務器 325

18.2.1 最簡單的Python Web服務器 326

18.2.2 Web服務器網關接口(WSGI) 327

18.2.3 ASGI 327

18.2.4 Apache 328

18.2.5 NGINX 329

18.2.6 其他Python Web服務器 329

18.3 Web服務器框架 330

18.3.1 Bottle 330

18.3.2 Flask 332

18.3.3 Django 336

18.3.4 其他框架 336

18.4 數據庫框架 337

18.5 Web服務和自動化 337

18.5.1 webbrowser 337

18.5.2 webview 338

18.6 Web API和REST 339

18.7 爬取數據 339

18.7.1 Scrapy 340

18.7.2 BeautifulSoup 340

18.7.3 requests-html 341

18.8 看場電影吧 341

18.9 後續內容 344

18.10 練習 344

第 19 章 成為Python主義者 345

19.1 關於編程 345

19.2 尋找Python代碼 346

19.3 安裝Python包 346

19.3.1 使用pip 346

19.3.2 使用virtualenv 347

19.3.3 使用pipenv 347

19.3.4 使用包管理器 348

19.3.5 從源代碼安裝 348

19.4 集成化開發環境 348

19.4.1 IDLE 348

19.4.2 PyCharm 348

19.4.3 IPython 349

19.4.4 Jupyter Notebook 350

19.4.5 JupyterLab 351

19.5 名稱和文檔 351

19.6 添加類型提示 352

19.7 測試 353

19.7.1 使用pylint、pyflakes 和pep8檢查代碼 353

19.7.2 使用unittest進行測試 355

19.7.3 使用doctest進行測試 358

19.7.4 使用nose進行測試 359

19.7.5 其他測試框架 360

19.7.6 持續集成 360

19.8 調試Python代碼 361

19.8.1 使用print() 361

19.8.2 使用裝飾器 362

19.8.3 使用pdb 363

19.8.4 使用breakpoint() 368

19.9 記錄錯誤消息 368

19.10 優化 370

19.10.1 測量時間 370

19.10.2 算法和數據結構 373

19.10.3 Cython、NumPy和C擴展 374

19.10.4 PyPy 374

19.10.5 Numba 374

19.11 源代碼控制 375

19.11.1 Mercurial 375

19.11.2 Git 376

19.12 分發你的程序 378

19.13 克隆本書 378

19.14 更多內容 378

19.14.1 圖書 379

19.14.2 網站 379

19.14.3 團體 380

19.14.4 會議 380

19.14.5 Python相關的工作機會 380

19.15 後續內容 380

19.16 練習 381

第 20 章 Python的藝術 382

20.1 2D圖形 382

20.1.1 標準庫 382

20.1.2 PIL和Pillow 383

20.1.3 ImageMagick 386

20.2 3D圖形 387

20.3 3D動畫 387

20.4 圖形用戶界面 388

20.5 繪圖、圖形和可視化 389

20.5.1 Matplotlib 389

20.5.2 Seaborn 391

20.5.3 Bokeh 393

20.6 游戲 393

20.7 音頻和音樂 393

20.8 後續內容 394

20.9 練習 394

第 21 章 工作中的Python 395

21.1 Microsoft Office套件 395

21.2 執行企業任務 396

21.3 處理企業數據 397

21.3.1 提取、轉換和裝載 397

21.3.2 數據驗證 400

21.3.3 其他信息源 400

21.4 開源Python企業包 400

21.5 金融中的Python 401

21.6 商業數據安全 401

21.7 地圖 402

21.7.1 格式 402

21.7.2 根據shapefile繪制地圖 403

21.7.3 Geopandas 405

21.7.4 其他繪圖包 405

21.7.5 應用和數據 406

21.8 後續內容 406

21.9 練習 406

第 22 章 Python的科學 407

22.1 標準庫中的數學和統計 407

22.1.1 數學函數 407

22.1.2 處理復數 409

22.1.3 使用decimal精確計算浮點數 410

22.1.4 使用fractions執行有理數運算 410

22.1.5 使用array創建壓縮序列 411

22.1.6 使用statistics進行簡單的統計 411

21.1.7 矩陣乘法 411

22.2 科學Python 411

22.3 NumPy 412

22.3.1 使用array()創建數組 412

22.3.2 使用arange()創建數組 413

22.3.3 使用zeros()、ones()和random()創建數組 413

22.3.4 使用reshape()改變數組的形狀 414

22.3.5 使用[]獲取元素 415

22.3.6 數組的算術運算 416

22.3.7 線性代數 417

22.4 SciPy 418

22.5 SciKit 418

22.6 Pandas 418

22.7 Python和各個科學領域 419

22.8 後續內容 420

22.9 練習 420

附錄A 寫給初級程序員的電腦軟硬件知識 421

附錄B 安裝Python 3 430

附錄C 截然不同的async 437

附錄D 習題答案 442

附錄E 速查表 483