編輯推薦
* 上手門檻低,8歲的小朋友Charlie親驗,不但可以看懂書中關於Python語法的基礎知識,且寫出了自己的小程式。
* 涵蓋的知識面廣,知識體系完備、系統,再也不用「面向百度」程式設計。
* 案例實戰性強,涉及大數據展示、網路爬蟲、遊戲等Python熱點應用領域,求職不再困難。
* 110道練習題/面試題與習題答案,程式設計圖書不僅是用來看的,還需要動手操練,知行合一,方為get一門技能的真經。
* 過萬小時線下授課經驗錘煉出的大師級講解能力,將深奧的原理用淺顯的比喻表達出來,一學就懂,一看就會。
* 誘惑十足的加值服務,作者提供用於學習和交流的配套網站及作者親自在線的答疑微信群、QQ群。
內容簡介
《瘋狂Python講義》既是一本適合初學者入門Python的圖書(一個8歲的小朋友在未出版前已學習了本書很多章節並動手寫出了自己的程序);這也是一本適合Python就業的圖書,因為本書涵蓋了網路程式設計、數據分析、網路爬蟲等大量企業實用的知識。
《瘋狂Python講義》全面而深入介紹了Python程式設計的相關內容,全書內容大致可分為四個部分,第一部分系統講解了Python的基本語法結構、Python的函數程式設計、Python的類別和物件、模組和套件、異常處理等核心語法;第二部分主要介紹Python常用的內建模組和套件,這部分包括Python的JSON、正規表示式支援、容器相關類別、collections套件、Tkinter GUI程式設計、IO程式設計、資料庫程式設計、並發程式設計、網路通訊程式設計等內容,這部分內容既是掌握Python程式設計的核心,也是Python進階的關鍵基礎;第三部分主要介紹Python開發工程化方面的內容,包括如何為Python程式編寫符合格式的文檔註釋、提取文檔註釋生成幫助文檔,為Python程式編寫測試用例,程式打包等內容;第四部分則屬於“Python專案實戰”,這部分引入了pygame、Matplotlib、Pygal、Scrapy這些第三方的包,通過專案介紹了Python遊戲開發、大數據展示、網路爬蟲等熱門技能,尤其是網路爬蟲和大數據展示,絕對是當下Python至熱的就業崗位。
與「瘋狂體系」書籍類似,雖然我會盡量讓《瘋狂Python講義》的講解通俗易懂(畢竟一個8歲的小朋友也能閱讀此書),但我創作「瘋狂體系」圖書的初衷從來就不是“簡單”和“入門”,本書所涵蓋的Python的深度和廣度,是很多書籍所不能比擬的,《瘋狂Python講義》涉及大量實用案例開發:五子棋遊戲、畫圖板、桌面彈珠、合金彈頭、大數據展示、基於網路的各國GDP對比、基於爬蟲的招聘熱點分析、基於爬蟲的高清圖片下載、基於Scrapy+Seleninum的微博登錄……設計這些案例的初衷不是“簡單”和“入門”,而是讓讀者學以致用、激發程式設計自豪感,進而引爆內心的程式設計熱情。因此那些僅圖簡單的讀者,建議不要選擇此書。 《瘋狂Python講義》課後習題共包括110道循序漸進的Python練習題(面試題),讀者可透過這些練習題鞏固所學、為面試做準備。如果讀者需要取得課後習題的解決方法、程式設計思路,可以登入http://www.crazyit.org網站或追蹤「瘋狂圖書」微信服務號碼。
《瘋狂Python講義》為所有打算深入掌握Python程式設計的讀者而編寫,適合各種層次的Python學習者和工作者閱讀,也適合作為大學教育、培訓機構的Python教材。但如果只是想簡單涉獵Python,則本書過於龐大,不適合閱讀。
作者簡介
李剛,十餘年軟體開發經驗,瘋狂軟體教育中心教學總監。瘋狂Java實訓營創辦人,瘋狂Java體係原創圖書作者。廣東技術師範學院電腦科學系兼任副教授,CSDN特邀講師。受訓的學生已在騰訊、阿里、華為、IBM、網易、唯品會、電信盈科等名企就職。國內知名高階IT技術圖書作家,已出版《瘋狂Java講義》《瘋狂Android講義》《輕量級Java EE企業應用實戰》《瘋狂前端開發講義》《瘋狂HTML5/CSS3/JavaScript講義》等著作。其中瘋狂Java體系圖書都已沉澱多年,贏得極高的市場認同,多次重印,多部著作印刷數量超過10萬冊,並被多所“985”“211”院校選作教材,部分圖書已被翻譯成繁體中文版,授權到中國台灣地區。
目錄
第1章Python語言概述與開發環境1
1.1 Python簡介2
1.1.1 Python簡史2
1.1.2 Python的特點3
1.2 Python程式運行機制3
1.3 開發Python的準備4
1.3.1 在Windows上安裝Python 5
1.3.2 在Linux上安裝Python 6
1.3.3 在Mac OS X上安裝Python 7
1.4 第一個Python程式8
1.4.1 編輯Python原始程式8
1.4.2 使用IDLE運行Python程式8
1.4.3 使用命令列工具運行Python程式9
1.5 互動式解釋器11
1.6 本章小結12
本章練習12
第2章變數和簡單類型13
2.1 單行註解與多行註解14
2.2 變數15
2.2.1 Python是弱型別語言15
2.2.2 使用print函數輸出變數16
2.2.3 變數的命名規則17
2.2.4 Python的關鍵字和內建函數18
2.3 數值類型19
2.3.1 整型19
2.3.2 浮點型21
2.3.3 複數21
2.4 字串入門22
2.4.1 字串和轉義字元22
2.4.2 拼接字串23
2.4.3 repr和字串23
2.4.4 使用input和raw_input取得使用者輸入24
2.4.5 長字串25
2.4.6 原始字串26
2.4.7 位元組串(bytes) 26
2.5 深入使用字串28
2.5.1 轉義字元28
2.5.2 字串格式化29
2.5.3 序列相關方法31
2.5.4 大小寫相關方法32
2.5.5 刪除空白33
2.5.6 尋找、取代相關方法34
2.5.7 分割、連接方法35
2.6 運算符36
2.6.1 賦值運算子36
2.6.2 算術運算子37
2.6.3 位元運算子39
2.6.4 擴展後的賦值運算子42
2.6.5 索引運算子42
2.6.6 比較運算子與bool型別42
2.6.7 邏輯運算子44
2.6.8 三目運算子45
2.6.9 in運算符46
2.6.10 運算子的結合性和優先權46
2.7 本章小結47
本章練習47
第3章列表、元組和字典49
3.1 序列簡介50
3.1.1 Python的序列50
3.1.2 建立清單和元組50
3.2 列表和元組的通用用法51
3.2.1 透過索引使用元素51
3.2.2 子序列51
3.2.3 加法52
3.2.4 乘法52
3.2.5 in運算符53
3.2.6 長度、最大值和最小值53
3.2.7 序列封包與序列解包54
3.3 使用列表55
3.3.1 建立列表55
3.3.2 增加列表元素56
3.3.3 刪除清單元素57
3.3.4 修改列表元素58
3.3.5 列表的其他常用方法59
3.4 使用字典61
3.4.1 字典入門61
3.4.2 建立字典62
3.4.3 字典的基本用法63
3.4.4 字典的常用方法64
3.4.5 使用字典格式化字串67
3.5 本章小結67
本章練習67
第4章流程控制68
4.1 順序結構69
4.2 if分支結構69
4.2.1 不要忘記縮排70
4.2.2 不要隨意縮排72
4.2.3 不要遺忘冒號73
4.2.4 if條件的類型73
4.2.5 if分支的邏輯錯誤74
4.2.6 if表達式75
4.2.7 pass語句75
4.3 斷言76
4.4 循環結構76
4.4.1 while循環77
4.4.2 使用while循環遍歷列表和元組78
4.4.3 for-in循環79
4.4.4 使用for-in迴圈遍歷列表和元組79
4.4.5 使用for-in迴圈遍歷字典80
4.4.6 循環使用else 81
4.4.7 嵌套循環83
4.4.8 for表達式84
4.4.9 常用工具函數86
4.5 控制循環結構87
4.6 牛刀小試90
4.7 本章小結98
本章練習98
第5章函數和lambda表達式101
5.1 函數入門102
5.2 函數的參數106
5.3 局部函數118
5.4 函數的高階內容119
5.5 局部函數與lambda表達式122
5.6 本章小結124
本章練習124
第6章類和對象125
6.1 類別和物件126
6.2 方法132
6.3 成員變數137
6.4 隱藏與封裝142
6.5 類別的繼承144
6.6 Python的動態性149
6.7 多態性153
6.8 枚舉類別156
6.9 本章小結159
本章練習159
第7章異常處理160
7.1 異常概述161
7.2 異常處理機制162
7.3 使用raise引發異常171
7.4 Python的異常傳播軌跡175
7.5 異常處理規則177
7.6 本章小結179
本章練習179
第8章Python類別的特殊方法180
8.1 常見的特殊方法181
8.2 與反射有關的屬性和方法186
8.3 與序列有關的特殊方法189
8.4 生成器193
8.5 運算子重載的特殊方法197
8.6 本章小結205
本章練習205
第9章模組和包206
9.1 模組化程式設計207
9.2 加載模組212
9.3 使用包219
9.4 查看模組內容224
9.5 本章小結226
本章練習226
第10章常見模組227
10.1 sys 228
10.2 os模組231
10.3 random 234
10.4 time 235
10.5 JSON支援238
10.6 正規表示式244
10.7 容器相關類別256
10.8 collections下的容器支援265
10.9 函數相關模組273
10.10 本章小結283
本章練習283
第11章圖形介面程式設計285
11.1 Python的GUI庫286
11.2 Tkinter GUI程式設計的元件287
11.3 佈局管理器293
11.4 事件處理299
11.5 Tkinter常用元件304
11.6 對話框(Dialog) 330
11.7 菜單342
11.8 在Canvas中繪圖349
11.9 本章小結371
本章練習371
第12章文件I/O 372
12.1 使用pathlib模組操作目錄373
12.2 使用os.path操作目錄379
12.3 使用fnmatch處理檔案名稱符合380
12.4 開啟文件381
12.5 讀取文件383
12.6 寫文件391
12.7 os模組的檔案和目錄函數393
12.8 使用tempfile模組產生暫存檔案和暫存目錄398
12.9 本章小結399
本章練習400
第13章資料庫程式設計401
13.1 Python資料庫API簡介402
13.2 操作SQLite資料庫404
13.3 操作MySQL資料庫417
13.4 本章小結427
本章練習427
第14章並發程式設計428
14.1 線程概述429
14.2 線程的創建與啟動431
14.3 線程的生命週期434
14.4 控制線程438
14.5 線程同步440
14.6 線程通信447
14.7 線程池454
14.8 線程相關類別458
14.9 多進程462
14.10 本章小結470
本章練習470
第15章網路程式設計471
15.1 網路程式設計的基礎知識472
15.2 Python的基本網路支援474
15.3 基於TCP協定的網路程式設計486
15.4 基於UDP協定的網路程式設計500
15.5 電子郵件支援505
15.6 本章小結511
本章練習512
第16章文檔和測試513
16.1 使用pydoc產生文檔514
16.2 軟體測試概述519
16.3 文檔測試523
16.4 單元測試525
16.5 使用PyUnit(unittest) 529
16.6 本章小結540
本章練習540
第17章打包發布541
17.1 使用zipapp模組542
17.2 使用PyInstaller生成可執行程式544
17.3 本章小結547
本章練習547
第18章合金彈頭548
18.1 合金彈頭遊戲簡介549
18.2 pygame簡介550
18.3 開發遊戲介面組件553
18.4 增加「角色」 566
18.5 合理繪製地圖575
18.6 增加音效577
18.7 增加遊戲場景579
18.8 本章小結583
本章練習583
第19章資料視覺化584
19.1 使用Matplotlib產生資料圖585
19.2 功能豐富的資料圖597
19.3 使用Pygal產生數據圖606
19.4 Pygal支持的常見數據圖609
19.5 處理數據617
19.6 本章小結629
本章練習629
第20章網路爬蟲630
20.1 安裝Scrapy 631
20.2 使用爬蟲爬取、分析招募資訊634
20.3 處理反爬蟲646
20.4 本章小結657
本章練習657
部分章節僅保留至二級標題,完整目錄請見本書。
前言/序言
前言
創作本書純屬偶然,起因是我兒子想學程式設計。當他想報程式興趣班時,居然沒報上、滿額了,而他是一個對生活充滿好奇的小孩,望著他滿是失落的眼睛,我想不如我來教吧,畢竟我曾經教了那麼多別人的孩子。
我的想法是:挑一門上手夠容易的語言來教,畢竟他只是個8歲的小孩。首先排除了Java和C,雖然我自己用這兩種語言比較多,但對於小孩來說,上手它們顯得有些枯燥;也考慮過Swift或Kotlin,能迅速帶著做點手機小遊戲比較酷,後來又覺得搭建運作環境有點費事;還是選一種能解釋執行的腳本語言吧,我想到了Python或Ruby,後來又了解到那個興趣班教的就是Python,那就選Python吧。
於是,他開始了自己的Python學習之旅。而我完全被困住了:每當他遇到一點問題就要來問我。這肯定不行,得找本書讓他自己看,這樣他就不用來煩我了。我是一個非常挑剔的人,找了不少書,卻發現很少有合適的——有些書上手簡單,但完全沒有按照Python本身的知識體系講解,單純地為了簡單而簡單;有些書略微系統有些,卻講得晦澀難懂。典型來說,只是一個變數的概念,幾乎沒有一本書能通俗地講明白。實際上,初學者並不需要知道變數的概念定義,他只要把變數當成一個小的“容器”,懂得對變數賦值就是把東西“裝入”變數即可。那麼我還是自己寫一本吧,畢竟我曾經為別人寫了那麼多書。
創作這本書時,我有兩點考慮。
1. 講解要盡量通俗,避免搞那些晦澀的概念
編程,首要的是能動手編,讓簡單的程序跑起來。動手編得多了,那些概念的意義自然就浮現出來了。就像一個外星人來到地球,從未見過桌子,找個人一直給他講桌子的概念,要他務必先理解桌子的概念,外星人的感覺一定是非常困惑;嘗試用不同的方法:找一堆桌子放在一起,一張桌子、一張桌子給他看,讓他在桌子上寫字、用電腦、吃飯,甚至把桌子拆開給他看,相信外星人很快就能理解“什麼是桌子”了。對於程式設計初學者而言,他們何嘗不是剛來到地球的外星人?
2. 知識體係要完善,而且遵循Python內在的邏輯
一直以來,我寫的書通常比較厚、內容也比較多。這和我挑剔的個性有關:既然做一件事情,當然要盡力做好它;否則乾脆別做。工業級的程式語言,它不是玩具,它本身有那麼多的知識點。不管你學或不學,程式語言本身的內容就在那裡!不管作者寫或不寫,程式語言本身的內容就在那裡。我寫書總會盡量做到“夠用”,起碼認真學完這本書之後,不會隨便遇到一個編程問題就只能問百度。
既要有完備的知識體系,也要詳細講透這些內容,書的篇幅自然就多了。同樣的知識內容,一本厚厚的、講解細緻的圖書,和一本薄薄的、浮光掠影的圖書,哪本比較容易看懂?
在知識內容相同的前提下,如果看不懂一本內容豐富、講解細緻的書,看一本薄薄的、浮光掠影的圖書反而能看懂?這完全沒道理。
但有些讀者確實這樣說過,這一點我也能理解,存在「鴕鳥心態」的人,他並不是第一個:看不到的就當它不存在。有些書之所以薄,無非是兩個知識點不講:這也不講,那也不講!讀者閱讀的時候固然是輕鬆,因為內容少呀。就像學數學,如果只教一加一等於二,當然講得簡單、學得輕鬆;但等到真正做事時才發現:啊?還有二加三等於五?數學還有乘法?還有除法?然後發現這也不會,那也看不懂,後果就是遇到問題就上百度。這就是有些所謂的開發者,他們是「面向百度」程式設計的。這些開發者往往哀嘆:當程式設計師太累了,一個問題往往要調半天甚至一天,其實他們根本不是調試,只是在找別人的程式碼、試別人的程式碼,運氣好找到了合適的程式碼,問題就解決了;找不到合適的程式碼就只能哀嘆了。
正因為基於以上兩點考慮進行創作,因此初學者上手本書的門檻比較低,大部分讀者都能迅速地透過學習本書內容寫出自己的Python程序、運行自己的Python程序;但要堅持把本書學完也需要一定的毅力:書中內容確實比較多,而且後面內容更偏向實際應用開發。
程式設計書籍不僅是用來「看」的,更是需要動手「練」的,正如先聖王陽明所倡導的:知行合一。學習本書需要讀者認真練習書中每個範例程序,還需要讀者認真完成全書在各章節後所配的110道Python練習題(面試題),如果讀者需要獲取關於課後習題的解決方法、編程思路,可以登入http://www.crazyit.org網站或追蹤「瘋狂圖書」微信公眾號(拿出手機掃描封面勒口處的二維碼)。
本書有什麼特點
本書不是一本簡單的Python入門教材,雖然本書上手門檻很低,但本書的知識體系很豐富。總結起來,本書有以下三個特點。
1. 講解通俗,上手門檻低
創作本書的最初目的決定了本書的上手門檻,本書不會故弄玄虛地糾纏於晦澀的概念,而是力求用淺顯易懂的比喻引出概念、用口語化的方式介紹編程、用清晰的邏輯解釋思路。
為了降低讀者閱讀的難度,書中程式碼的註解非常詳細,幾乎每兩行程式碼就有一行註解。本書所有程式中關鍵程式碼以粗體字標出,也是為了幫助讀者能快速找到這些程式的關鍵點。
2.案例驅動,引爆程式激情
本書不是知識點的鋪陳,而是致力於將知識點融入實際專案的開發中,所以書中涉及大量Python案例:五子棋遊戲、畫圖板、桌面彈珠、合金彈頭、大數據展示、各國人均GDP比較、基於爬蟲的招募熱點分析、基於爬蟲的高清圖片下載、基於Scrapy+Selenium的微博登入…希望讀者透過編寫這些程式找到程式設計的樂趣。
3.知識體系完備,直面企業開發實戰
雖然本書在講解上力求簡單,但本書內容並不簡單,全書知識體系完備且係統,不僅全方位地覆蓋Python語言本身的語法,而且覆蓋大數據展示、爬蟲等Python的熱門技術,這些內容能帶領讀者直面企業開發實戰。
本書寫給誰看
如果你只想對Python有所涉獵,那麼本書並不適合你;如果小朋友有興趣學習本書,可先引導他閱讀本書前半部分;如果你想全面掌握Python編程,並使用Python解決大數據分析、網路爬蟲等實際企業開發項目,那麼你應該選擇本書,並認真學完此書。希望本書能引爆你內心潛在的程式設計熱情,讓你廢寢忘食。