Python語言是面向對象的模塊化設計語言,它易于學習、易于維護、可讀性強,適合初學者作為第一門程序設計語言。本書以Python3.5版本作為教學版,針對初學者的特點,分為五篇內容進行全面講解:第壹篇為基礎入門篇(第1-3章),介紹Python語言的基本功能;第二篇為有序和無序篇(第4-6章),介紹控制臺應用程序和窗口應用程序;第三篇為標準函數篇(第7和8章),介紹標準函數庫的應用;第四篇為面向對象篇(第9-11章),介紹封裝、繼承和多態;第五篇為高級篇(第12-15章),介紹Python使用各種模塊來處理數據流的高級應用。全書輔以豐富的范例程序和精簡的表達方式來降低學習難度,在每個章節的后提供課后練習,提倡讀者多動手實踐。
前言“大蟒蛇”出沒!Python程序設計語言來了!
Python的創始人Guido van Rossum是Monty“大蟒蛇”飛行馬戲團的一位愛好者。在1989年圣誕節期間,他決心開發一個新的腳本解釋程序,并把這個程序設計語言取名為Python(這個英文單詞的意思是“巨蛇”或者“蟒蛇”)。
本書內容共分為5篇:基礎入門篇、有序和無序篇、標準函數篇、面向對象篇和高級篇。
基礎入門篇(第1~3章)踏上學習之旅時,首先把重點放在Python語言的基礎語法上。Python本身提供了IDEL軟件作為Python程序的集成開發環境。本篇從Python內置的類型講起,與其他程序設計語言不同的是,每個變量都指向引用的對象。Python為處理數值提供了豐富的功能,如整數、浮點數和復數,甚至還可以使用有理數(分數)。對于改變程序語句的流程控制,可根據Python的簡明原則,if/else條件語句以及for、while循環語句就可以“行遍天下”。
有序和無序篇(第4~6章)掌握了Python的基本語法,當然就可以“游歷天下”了。在本篇中,我們先來認識序列類型的字符串String、列表List和元組Tuple,映射類型的字典Dictionary,無序類型的集合Set。對于Python來說,即使是單個字符也是字符串,所以處理字符串有相當多的方法,如切片、索引、搜索和結合。而可變數據列表List類型和不可變的元組Tuple類型,與一般程序設計語言中數組的不同之處是,它們可以存放不同類型的元素。Dictionary類型以key和value來形成對應關系(映射關系),而集合Set類型也支持數學的集合運算。
標準函數篇(第7和8章)Python有強大的標準函數庫,內容包羅萬象,本書無法逐一介紹。本篇首先介紹的是自定義函數,隨后綜合了各個章節使用過的內置函數。本篇對于函數中接收數據的參數和進行傳遞的參數有較多的介紹。在學習導入模塊時,會介紹處理與日期、時間有關的模塊。
面向對象篇(第9~11章)以面向對象為基礎,探討面向對象程序設計的3個特性:繼承(Inheritance)、封裝(Encapsulation)和多態(Polymorphism)。其他程序設計語言會以構造函數來創建、初始化對象。Python則分兩個階段,先以__new()__方法創建對象,再以__init__初始化對象。所有的類、屬性和方法都是公有的,想要封裝,可借助屬性修飾器( property)或者用下劃線“_”來指明它是私有的。繼承采用多重機制,不過未進行更深入的探討,而是以單一繼承來介紹is_a和has_a的用法。
在很多情況下,編寫程序都會發生異常(或稱例外),除了可以采用try、except、finally語句之外,還可以搭配raise、assert語句從程序代碼中拋出異常。
高級篇(第12~15章)Python使用IO模塊來處理數據流,即以文字和二進制數據配合功能強大的內置函數open()。GUI以tkinter為主,簡單地介紹Label、Entry、Text、Radiobutton、Checkbutton和Button組件,以及用于版面布局的pack()、grid()和place()方法。標準對話框的messagebox、simpledialog、filedialog、colorchooser可用于提供信息,如輸入簡單數據、打開文件和產生調色板。本篇還介紹了制作菜單的Menu組件以及有關鼠標、鍵盤的事件。最后一章以Django軟件包來說明MVT架構,大致介紹前端Web、后端數據庫的運行原理。
本書由吳惠茹主編,同時參與編寫工作的還有施妍然、王國春、郭丹陽、孟宗斌、魏忠波、王翔、關靜、卞誠君、周曉娟、閆秀華、劉雪連、孫學南等。如果讀者在學習過程中遇到無法解決的問題,或者對本書持有意見或建議,請電子郵件聯系booksaga 126.com。
本書范例程序的下載地址如下:
http://pan.baidu.com/s/1bo7kMKZ(注意區分數字與字母的大小寫)由于編者水平有限,疏漏在所難免,懇請廣大讀者批評指正。
編者2017年9月
目 錄
前言
第1章 Python的世界1
1.1 輕松搞定Python1
1.1.1 Python的起源2
1.1.2 Python的版本3
1.1.3 安裝Python3
1.1.4 測試Python 3.5軟件8
1.1.5 Python 3.5有什么名堂10
1.2 Python的IDE-IDLE12
1.2.1 有哪些IDE軟件12
1.2.2 Python Shell13
1.2.3 IDLE的環境設置18
1.3 Python的編寫風格26
1.3.1 第一個Python程序27
1.3.2 程序的縮排和注釋28
1.3.3 語句的分行和合并28
1.3.4 程序的輸入和輸出29
章節回顧29
課后習題30
第2章 Python基本語法32
2.1 變量32
2.1.1 標識符的命名規則32
2.1.2 保留字和關鍵字33
2.1.3 給變量賦值33
2.2 認識Python的內置類型37
2.3 Python的數據類型38
2.3.1 整數類型38
2.3.2 使用浮點數41
2.3.3 復數類型44
2.3.4 更精確的Decimal類型44
2.3.5 例外——分數47
2.4 使用表達式48
2.4.1 算術運算符48
2.4.2 賦值運算符51
2.4.3 比較運算符52
2.4.4 邏輯運算符52
2.4.5 位運算符53
章節回顧55
課后習題55
第3章 流程結構57
3.1 程序設計語言結構57
3.2 根據條件進行選擇58
3.2.1 if語句采用單向判斷58
3.2.2 if/else語句做雙向判斷60
3.2.3 多重選擇62
3.3 循環語句64
3.3.1 for循環64
3.3.2 while循環67
3.3.3 嵌套循環69
3.3.4 產生隨機數的random模塊71
3.4 特殊流程控制72
3.4.1 break語句73
3.4.2 continue語句74
章節回顧75
課后習題75
第4章 序列類型與字符串78
4.1 序列類型78
4.1.1 序列與迭代器79
4.1.2 創建序列數據80
4.1.3 序列元素及其操作80
4.1.4 與序列有關的函數83
4.2 字符串84
4.2.1 創建字符串84
4.2.2 切片的概念87
4.2.3 轉義字符91
4.2.4 字符串常用函數92
4.3 格式化字符串100
4.3.1 %運算符——格式字符串100
4.3.2 內置函數format()102
4.3.3 str.format()方法104
章節回顧107
課后習題108
第5章 元組與列表111
5.1 元組111
5.1.1 創建元組111
5.1.2 讀取元組元素115
5.1.3 元組的相關操作116
5.2 列表的基本操作119
5.2.1 創建列表120
5.2.2 與列表有關的方法122
5.2.3 數據排序124
5.2.4 列表推導式128
5.3 二維列表133
5.3.1 產生矩陣133
5.3.2 讀取矩陣134
5.3.3 矩陣與列表推導式136
5.3.4 不規則列表139
5.4 列表與復制141
5.4.1 列表與淺復制141
5.4.2 copy模塊的copy()方法143
5.4.3 deepcopy()方法復制對象本身144
章節回顧145
課后習題145
第6章 字典和集合148
6.1 字典148
6.1.1 映射類型與字典148
6.1.2 創建字典149
6.1.3 鍵、值的操作153
6.1.4 與字典有關的方法158
6.1.5 字典推導式161
6.2 默認字典和有序字典163
6.2.1 默認字典163
6.2.2 有序字典165
6.3 集合168
6.3.1 什么是哈希169
6.3.2 創建集合對象170
6.3.3 集合的相關操作171
6.3.4 集合的數學計算173
6.3.5 集合推導式179
章節回顧179
課后習題180
第7章 函數182
7.1 認識函數182
7.1.1 Python的內置函數183
7.1.2 函數基礎186
7.1.3 定義函數186
7.1.4 調用函數187
7.1.5 返回值188
7.2 參數的基本機制190
7.2.1 參數如何傳遞191
7.2.2 位置參數有順序性193
7.2.3 默認參數值193
7.2.4 關鍵字參數197
7.3 可長可短的參數行199
7.3.1 形式參數的*表達式199
7.3.2 **表達式與字典配合202
7.3.3 *運算符拆分可迭代對象205
7.3.4 **運算符拆分字典對象207
7.4 更多函數的討論211
7.4.1 作用域211
7.4.2 函數是第一等“公民”214
7.4.3 局部函數與閉包216
7.4.4 lambda函數218
7.4.5 遞歸223
章節回顧225
課后習題226
第8章 模塊與函數庫230
8.1 導入模塊230
8.1.1 命令行的參數列表230
8.1.2 import/as語句232
8.1.3 from/import語句232
8.1.4 命名空間與dir()函數233
8.2 使用模塊234
8.2.1 模塊搜索路徑234
8.2.2 自定義模塊235
8.2.3 reload()函數238
8.3 認識函數庫240
8.3.1 隨機數240
8.3.2 pprint模塊讓打印更有看頭243
8.4 處理時間與日期245
8.4.1 獲取時間戳的time模塊245
8.4.2 提供日期和時間的datetime模塊249
8.4.3 calendar模塊257
章節回顧260
課后習題260
第9章 面向對象基礎263
9.1 認識面向對象263
9.1.1 對象具有屬性和方法264
9.1.2 類是對象的藍圖264
9.1.3 抽象化概念265
9.2 類與對象265
9.2.1 定義類266
9.2.2 先構造再初始化對象270
9.2.3 設置、檢查對象的屬性274
9.2.4 處理對象的特殊方法275
9.3 類與修飾器278
9.3.1 類也有屬性278
9.3.2 認識修飾器279
9.3.3 類修飾器284
9.3.4 類方法和靜態方法288
9.4 重載運算符290
9.4.1 重載算術運算符290
9.4.2 對重載加號運算符做更多了解291
9.4.3 重載比較大小的運算符295
章節回顧296
課后習題297
第10章 淺談繼承機制299
10.1 認識繼承299
10.1.1 與繼承有關的名詞299
10.1.2 繼承概念299
10.1.3 特化和泛化300