Python 學習手冊, 5/e (Learning Python, 5/e)

(美)馬克·盧茨(Mark Lutz)

立即出貨

買這商品的人也買了...

商品描述

如果你想動手編寫高效、高質量並且很容易與其他語言和工具集成的代碼,本書將快速地幫助你利用Python提高效率。本書基於Python專家的流程培訓課程編寫,內容通俗易懂。本書包含很多註釋的例子和插圖,以幫助你開始使用Python2.7和3.3。每章都包含關於Python語言的重要組成部分的一節課。本書主要內容:瞭解Python的主要內置對象類型,如數字、列表和字典;創建和處理對象的Python語句,學習Python的一般語法模型;利用Python的基本程序工具的結構和重用代碼;瞭解Python模塊:語句包、函數和其他工具;探索Python的面向對象的編程工具,用於構建代碼;瞭解異常處理模型和開發工具編寫較大的程序;探索先進的Python工具,包括裝飾符、描述符、元類、Unicode的處理。

作者簡介

Mark Lutz是一位Python培訓講師。他是Python熱銷書籍的作者,同時從1992年起就成為Python社區的引領者。Mark有著30餘年的軟件開發經驗,也是《Python編程》《Python袖珍指南》等書的作者。

目錄大綱

上冊
前言1 
第一部分使用入門
第1章問答環節21 
人們為何使用Python 21 
軟件質量22 
開發者效率23 
Python是一門“腳本語言”嗎23 
好吧,Python的缺點是什麼25 
如今誰在使用Python 25 
其他的Python設計權衡:一些難以把握的方面26 
使用Python可以做些什麼28 
系統編程28 
圖形用戶界面(GUI) 29 
Internet腳本29 
組件集成30 
數據庫編程30 
快速原型31 
數值計算和科學計算編程31 
更多內容:遊戲、圖像、數據挖掘、機器人、Excel等31 
Python如何開發並獲得支持32 
開源的權衡33 
Python有哪些技術上的優點33 
面向對象和函數式33 
免費34 
可移植34 
功能強大35 
可混合36 
相對簡單易用36 
相對簡單易學37 
以Monty Python命名37
Python和其他語言比較起來怎麼樣38 
本章小結39 
本章習題39 
習題解答40 
Python是工程,不是藝術41 
第2章Python如何運行程序43 
Python解釋器簡介43 
程序執行45 
程序員的視角45 
Python的視角46 
執行模型的變體48 
Python的各種實現49 
執行優化工具52 
凍結二進製文件53 
未來的可能性54 
本章小結55 
本章習題55 
習題解答56 
第3章你應如何運行程序57 
交互式命令行模式57 
開始一個交互式會話57 
Windows平台上的交互式命令行在哪裡59 
系統路徑59 
Python 33中的新Windows選項:PATH和啟動器60 
運行的位置:代碼目錄61 
不需要輸入的內容:提示符和註釋62 
交互式地運行代碼63 
為什麼要使用交互式命令行模式64 
使用注意:交互命令行模式65 
系統命令行和文件67 
第一段腳本68 
使用命令行運行文件69
不同的命令行使用方式70 
使用注意:命令行和文件71 
UNIX風格可執行腳本:#! 72 
UNIX腳本基礎72 
UNIX env查找技巧73 
Python 33 Windows啟動器:Windows也有#!了73 
點擊文件圖標75 
圖標點擊基礎知識75 
在Windows上點擊圖標76 
Windows上輸入的技巧77 
其他圖標點擊的限制79 
模塊導入和重載79 
導入和重載基礎知識80 
模塊的宏觀視角:屬性82 
使用注意:import和reload 85 
使用exec運行模塊文件85 
IDLE用戶界面86 
IDLE啟動細節87 
IDLE基礎用法88 
IDLE功能特性89 
高級IDLE工具90 
使用注意:IDLE 90 
其他IDE 92 
其他啟動選項93 
嵌入式調用93 
凍結二進制可執行文件94 
文本編輯器啟動方式94 
其他的啟動方式95 
未來的可能95 
應該選用哪種方式95 
調試Python代碼96 
本章小結97
本章習題97 
習題解答98 
第一部分練習題99 
第二部分類型和運算
第4章介紹Python對像類型105 
Python知識結構105 
為什麼要使用內置類型106 
Python核心數據類型107 
數字108 
字符串110 
序列操作110 
不可變性112 
特定類型的方法113 
尋求幫助115 
字符串編程的其他方式116 
Unicode字符串117 
模式匹配119 
列表120 
序列操作120 
特定的操作121 
邊界檢查121 
嵌套122 
推導122 
字典125 
映射操作125 
重訪嵌套126 
不存在的鍵:if測試128 
鍵的排序:for循環129 
迭代和優化131 
元組132 
為什麼要使用元組133 
文件133 
二進製字節文件134 
Unicode文本文件135 
其他類文件工具137 
其他核心類型137
如何破壞代碼的靈活性139 
用戶定義的類140 
剩餘的內容141 
本章小結141 
本章習題141 
習題解答142 
第5章數值類型143 
數值類型基礎知識143 
數值字面量144 
內置數值工具146 
Python表達式運算符146 
數字的實際應用151 
變量與基礎表達式151 
數值的顯示格式153 
str和repr顯示格式154 
普通比較與鍊式比較154 
除法:經典除法、向下取整除法和真除法156 
整數精度160 
複數160 
十六進制、八進制和二進制:字面量與轉換161 
按位操作163 
其他內置數值工具164 
其他數值類型167 
小數類型167 
分數類型169 
集合173 
布爾型180 
數值擴展181 
本章小結182 
本章習題182 
習題解答182 
第6章動態類型184 
缺少聲明語句的情況184 
變量、對象和引用184
類型屬於對象,而不是變量186 
對象的垃圾收集187 
關於Python垃圾回收的更多討論188 
共享引用189 
共享引用和在原位置修改190 
共享引用和相等192 
動態類型隨處可見193 
“弱”引用194 
本章小結194 
本章習題194 
習題解答195 
第7章字符串基礎196 
本章範圍196 
Unicode簡介197 
字符串基礎197 
字符串字面量199 
單引號和雙引號字符串是一樣的200 
轉義序列代表特殊字符200 
原始字符串阻止轉義203 
三引號編寫多行塊字符串205 
實際應用中的字符串206 
基本操作206 
索引和分片207 
請留意:分片211 
字符串轉換工具212 
修改字符串I 214 
字符串方法216 
方法調用語法216 
字符串的方法217 
字符串方法示例:修改字符串II 218 
字符串方法示例:解析文本220 
實際應用中的其他常見字符串方法220
原始string模塊的函數(在Python 3X中刪除) 221 
字符串格式化表達式223 
格式化表達式基礎224 
高級格式化表達式語法225 
高級格式化表達式舉例226 
基於字典的格式化表達式227 
字符串格式化方法調用228 
字符串格式化方法基礎228 
添加鍵、屬性和偏移量229 
高級格式化方法語法230 
高級格式化方法舉例231 
與%格式化表達式比較233 
為什麼使用格式化方法236 
通用類型分類241 
同一分類中的類型共享同一個操作集241 
可變類型能夠在原位置修改242 
本章小結242 
本章習題243 
習題解答243 
第8章列表與字典245 
列表245 
列表的實際應用248 
基本列表操作248 
列表迭代和推導248 
索引、分片和矩陣249 
原位置修改列表250 
字典256 
字典的實際應用258 
字典的基本操作258 
原位置修改字典259 
其他字典方法260 
示例:電影數據庫262
字典用法注意事項263 
創建字典的其他方式267 
請留意:字典vs列表268 
Python 3X和27中的字典變化269 
請留意:字典接口276 
本章小結277 
本章習題277 
習題解答277 
第9章元組、文件與其他核心類型279 
元組280 
元組的實際應用281 
為什麼有了列表還要元組283 
重訪記錄:有名元組284 
文件286 
打開文件287 
使用文件288 
文件的實際應用289 
文本和二進製文件:一個簡要的故事290 
在文件中存儲Python對象:轉換291 
存儲Python原生對象:pickle 293 
用JSON格式存儲Python對象294 
存儲打包二進制數據:struct 296 
文件上下文管理器297 
其他文件工具297 
核心類型複習與總結299 
請留意:運算符重載300 
對象靈活性300 
引用vs複製301 
比較、等價性和真值303 
Python中True和False的含義307 
Python的類型層次309
類型的對象309 
Python中的其他類型311 
內置類型陷阱311 
賦值創建引用,而不是複制311 
重複會增加層次深度312 
注意循環數據結構313 
不可變類型不可以在原位置改變313 
本章小結314 
本章習題314 
習題解答315 
第二部分練習題315 
第三部分語句和語法
第10章Python語句簡介321 
重溫Python的知識結構321 
Python的語句322 
兩種不同的if 324 
Python增加的元素325 
Python刪除的元素325 
為什麼採用縮進語法327 
幾種特殊情況329 
簡短示例:交互式循環331 
一個簡單的交互式循環331 
對用戶輸入做數學運算333 
通過測試輸入數據來處理錯誤334 
用try語句處理錯誤335 
嵌套三層深的代碼337 
本章小結338 
本章習題338 
習題解答338 
第11章賦值、表達式和打印340 
賦值語句340 
賦值語句形式341
序列賦值342 
Python 3X中的擴展序列解包345 
多目標賦值349 
增量賦值350 
變量命名規則353 
Python中的廢棄協議355 
表達式語句356 
表達式語句和原位置修改358 
打印操作358 
Python 3X的print函數359 
Python 2X的print語句362 
打印流重定向363 
版本中立的打印367 
為什麼你要注意:print和stdout 369 
本章小結370 
本章習題370 
習題解答370 
第12章if測試和語法規則372 
if語句372 
一般形式372 
基礎示例373 
多路分支373 
複習Python語法規則375 
代碼塊分隔符:縮進規則377 
語句分隔符:行與行間連接符378 
一些特殊情況379 
真值和布爾測試381 
if/else三元表達式383 
請留意:布爾值384 
本章小結386 
本章習題386 
習題解答386
第13章while循環和for循環387 
while循環387 
一般形式387 
示例388 
break、continue、pass和循環的else 389 
一般循環形式389 
pass 389 
continue 391 
break 391 
循環的else 392 
請留意:仿真C語言的while循環393 
for循環394 
一般形式394 
示例395 
請留意:文件掃描器400 
編寫循環的技巧402 
計數器循環:range 402 
序列掃描:while和range vs for 403 
序列亂序器:range和len 404 
非窮盡遍歷:range vs分片405 
修改列表:range vs推導406 
並行遍歷:zip和map 407 
同時給出偏移量和元素:enumerate 410 
請留意:shell命令及其他411 
本章小結414 
本章習題414 
習題解答414 
第14章迭代和推導416 
迭代器:初次探索417 
迭代協議:文件迭代器417
手動迭代:iter和next 420 
其他內置類型可迭代對象423 
列表推導:初次深入探索425 
列表推導基礎426 
在文件上使用列表推導427 
擴展的列表推導語法428 
其他迭代上下文430 
Python 3X新增的可迭代對象435 
對Python 2X版本代碼的影響:利與弊435 
range可迭代對象436 
map、zip和filter可迭代對象437 
多遍迭代器vs單遍迭代器439 
字典視圖可迭代對象440 
其他迭代話題441 
本章小結442 
本章習題442 
習題解答442 
第15章文檔444 
Python文檔資源444 
#註釋445 
dir函數445 
文檔字符串:__doc__ 447 
PyDoc:help函數450 
PyDoc:HTML報告453 
改變PyDoc的顏色456 
超越文檔字符串:Sphinx 461 
標準手冊集462 
網絡資源463 
已出版的書籍463 
常見代碼編寫陷阱463 
本章小結465
本章習題466 
習題解答466 
第三部分練習題467 
第四部分函數和生成器
第16章函數基礎473 
為何使用函數474 
編寫函數475 
def語句476 
def語句執行於運行時477 
第一個示例:定義和調用478 
定義478 
調用478 
Python中的多態479 
第二個示例:尋找序列的交集480 
定義480 
調用481 
重訪多態482 
局部變量482 
本章小結483 
本章習題483 
習題解答483 
第17章作用域485 
Python作用域基礎485 
作用域細節486 
變量名解析:LEGB規則488 
作用域實例490 
內置作用域491 
打破Python 2X的小宇宙494 
global語句494 
程序設計:最少化全局變量495 
程序設計:最小化跨文件的修改497 
其他訪問全局變量的方式498 
作用域和嵌套函數499 
嵌套作用域的細節500
嵌套作用域舉例500 
工廠函數:閉包501 
使用默認值參數來保存外層作用域的狀態503 
Python 3X中的nonlocal語句507 
nonlocal基礎508 
nonlocal應用509 
為什麼選nonlocal?狀態保持備選項511 
nonlocal變量的狀態:僅適用於Python 3X 511 
全局變量的狀態:只有一份副本512 
類的狀態:顯式屬性(預習) 513 
函數屬性的狀態:Python 3X和Python 2X的異同514 
請留意:定制open 516 
本章小結518 
本章習題518 
習題解答520 
第18章參數521 
參數傳遞基礎521 
參數和共享引用522 
避免修改可變參數524 
模擬輸出參數和多重結果525 
特殊的參數匹配模式526 
參數匹配基礎526 
參數匹配語法527 
更深入的細節528 
關鍵字參數和默認值參數的示例529 
可變長參數的實例532 
Python 3X的keyword-only參數536 
min提神小例539 
滿分540
附加分541 
結論542 
通用set函數542 
模擬Python 3X print函數544 
使用keyword-only參數546 
請留意:關鍵字參數547 
本章小結548 
本章習題548 
習題解答549 
第19章函數的高級話題550 
函數設計概念550 
遞歸函數552 
用遞歸求和552 
編碼替代方案553 
循環語句vs遞歸554 
處理任意結構555 
函數對象:屬性和註解558 
間接函數調用:“一等”對象559 
函數自省560 
函數屬性561 
Python 3X中的函數註解562 
匿名函數:lambda564 
lambda表達式基礎564 
為什麼使用lambda 566 
如何(不)讓Python代碼變得晦澀難懂568 
作用域:lambda也能嵌套569 
請留意:lambda回調570 
函數式編程工具570 
在可迭代對象上映射函數:map 571 
選擇可迭代對像中的元素:filter 573 
合併可迭代對像中的元素:reduce 573
本章小結575 
本章習題575 
習題解答575 
第20章推導和生成577 
列表推導與函數式編程工具577 
列表推導與map 578 
使用filter增加測試和循環嵌套579 
示例:列表推導與矩陣582 
不要濫用列表推導:簡單勝於復雜(KISS) 584 
請留意:列表推導和map 585 
生成器函數與表達式587 
生成器函數:yield vs return 587 
生成器表達式:當可迭代對象遇見推導語法592 
生成器函數vs生成器表達式597 
生成器是單遍迭代對象599 
Python 33的yield from擴展600 
內置類型、工具和類中的值生成601 
實例:生成亂序序列604 
不要過度使用生成器:明確勝於隱晦(EIBTI) 609 
示例:用迭代工具模擬zip和map 611 
為什麼你要注意:單遍迭代616 
推導語法總結617 
作用域及推導變量617 
理解集合推導和字典推導619 
集合與字典的擴展推導語法620 
本章小結621 
本章習題621 
習題解答621 
第21章基準測試623
計時迭代可選方案623 
自己編寫的計時模塊624 
33版本中新的計時器調用627 
計時腳本628 
計時結果630 
計時模塊可選方案633 
其他建議636 
用timeit為迭代和各種Python計時637 
timeit基礎用法637 
基準測試模塊和腳本:timeit 641 
基準測試腳本結果643 
基準測試的更多樂趣646 
其他基準測試主題:pystones 650 
函數陷阱651 
局部變量是被靜態檢測的651 
默認值參數和可變對象653 
沒有return語句的函數655 
其他函數陷阱655 
本章小結656 
本章習題656 
習題解答656 
第四部分練習題657 
第五部分模塊和包
第22章模塊:宏偉藍圖663 
為什麼使用模塊664 
Python程序架構664 
如何組織一個程序665 
導入和屬性665 
標準庫模塊667 
import如何工作667 
1搜索668 
2編譯(可選) 668 
3運行669
字節碼文件:Python 32及以上版本的__pycache__ 670 
實際應用中的字節碼文件模型671 
模塊搜索路徑672 
配置搜索路徑674 
搜索路徑的變化674 
syspath列表675 
模塊文件選擇676 
第三方工具:distutils 678 
本章小結678 
本章習題679 
習題解答679 
第23章模塊代碼編寫基礎680 
模塊的創建680 
模塊文件名680 
其他種類的模塊681 
模塊的使用681 
import語句681 
from語句682 
from *語句682 
導入只發生一次683 
import和from是賦值語句684 
import和from的等價性685 
from語句潛在的陷阱686 
模塊命名空間687 
文件產生命名空間687 
命名空間字典:__dict__ 689 
屬性名稱的點號運算689 
導入與作用域690 
命名空間的嵌套691 
重新加載模塊692 
reload基礎693 
reload示例694
請留意:模塊重新加載695 
本章小結696 
本章習題696 
習題解答696 
第24章模塊包698 
包導入基礎698 
包和搜索路徑設置699 
__init__py包文件