Python應用開發實戰
技術審校者簡介
閱讀注意事項
電子書讀者注意事項
本書主要內容
閱讀本書的准備
本書的目標讀者
約定體例
資源與支持
配套資源
與我們聯系
關於異步社區和異步圖書
1 開發簡單應用
1.1 重要提示
1.2 安裝的先決條件
安裝Python
1.方法1——官方發行版本
2.方法2——捆綁發行版本
3.Python安裝位置
類UNIX操作系統
Windows操作系統
4.驗證Python安裝
5.安裝pip
6.安裝IPython
7.選擇集成開發環境
1.3 本書的主題
了解本書人物
1.4 簡單的腳本——獸人之襲v0.0.1
1.4.1 游戲簡介——獸人之襲v0.0.1
1.4.2 問題說明
1.4.3 偽代碼——0.0.1版本
1.4.4 代碼查看
1.4.5 運行獸人之襲v0.0.1
1.5 使用函數——獸人之襲v0.0.5
1.5.1 重新回顧以前的版本
1.5.2 有攻擊功能的偽代碼——0.0.5版本
1.5.3 代碼查看
1.5.4 運行獸人之襲v0.0.5
1.6 使用面向對象編程——獸人之襲v1.0.0
1.6.1 功能需求的優先度
1.6.2 問題說明
1.6.3 重新設計代碼
1.6.4 描繪整個場景
1.偽UML表示
2.了解偽UML圖表
1.6.5 代碼查看
1.6.6 運行獸人之襲v1.0.0
1.7 Python中的抽象基類
練習
1.8 小結
對電子書讀者非常重要的提示
2 異常處理
2.1 修改獸人之襲v1.0.0
2.1.1 問題調試
2.1.2 bug修復中……
2.2 異常
2.2.1 什么是異常
2.2.2 最常見的異常
2.2.3 異常處理
2.2.4 異常的拋出和再拋出
2.2.5 try...except的else代碼塊
2.2.6 finally...清理吧
2.3 回歸游戲——獸人之襲v1.1.0
2.3.1 准備工作
2.3.2 增加異常處理代碼
2.3.3 運行獸人之襲v1.1.0
2.4 自定義異常
2.4.1 准備工作
2.4.2 自定義異常——問題所在
2.4.3 編寫一個新的異常類
2.4.4 擴展異常類
2.4.5 繼承exception類
2.5 練習
2.6 小結
3 模塊化、打包和部署
3.1 選擇一種版本控制規約
3.1.1 連續遞增
3.1.2 使用日期格式
3.1.3 語義版本控制方案
3.2 代碼模塊化
獸人之襲v2.0.0
3.3 創建Python包
從包中導入
3.4 在PyPI上發布包
3.4.1 發行版本准備
1.步驟1——設置包路徑
2.步驟2——編寫setup.py文件
3.步驟3——更新README和LICENSE.txt文件
4.步驟4——更新MANIFEST.in文件
5.步驟5——構建一個部署就緒版本
3.4.2 上傳發行版
1.步驟1——在PyPI測試網站上創建賬號
2.步驟2——創建一個.pypirc文件
3.步驟3——注冊你的項目
4.步驟4——上傳包
3.4.3 一條命令完成所有的事情
3.4.4 安裝你自己的發行版
3.5 使用私有的PyPI倉庫
3.5.1 步驟1——安裝pypiserver
3.5.2 步驟2——創建一個新的源代碼發行版
3.5.3 步驟3——啟動本地服務器
3.5.4 步驟4——安裝私有發行版
3.6 創建增量發布
3.6.1 打包並上傳新版本
3.6.2 升級已經安裝的版本
3.7 代碼的版本控制
3.7.1 Git資源
3.7.2 安裝Git
3.7.3 配置你的驗證信息
3.7.4 Git基礎術語
3.7.5 創建並使用本地倉庫
1.創建一個空的遠程倉庫
2.克隆倉庫
3.將代碼復制到克隆倉庫
4.存儲代碼及提交
5.推送變更到中央倉庫
3.8 使用Git的GUI客戶端
3.9 練習
3.10 小結
4 代碼文檔和最佳實踐
4.1 編寫代碼文檔
4.1.1 文檔字符串
4.1.2 reStructuredText簡介
1.章節的標題
2.段落
3.內聯標記
4.代碼片段
5.數學公式
6.符號列表和編號列表
4.1.3 使用RST的文檔字符串
4.1.4 文檔字符串格式化風格
4.1.5 自動生成文檔字符串stubs
4.1.6 使用Sphinx生成文檔
1.步驟1——使用pip安裝Sphinx
2.步驟2——使用cd命令進入源目錄
3.步驟3——運行sphinx-quickstart
4.步驟4——更新conf.py
5.步驟5——運行sphinx-apidoc
6.步驟6——建立文檔
4.2 Python編碼標准
4.3 代碼分析——我們做得怎么樣呢
4.3.1 使用IDE進行代碼分析
4.3.2 Pylint
1.Pylint實踐
2.PEP8和AutoPEP8
4.4 練習
4.5 小結
5 單元測試和重構
5.1 本章的組織方式
重要說明
5.2 為何要進行測試
5.2.1 提出了一個新的需求
5.2.2 你實現了這個功能
5.2.3 但是有些事情似乎不對了……
5.2.4 它需要完全測試
5.3 單元測試
Python的unittest框架
1.基本術語
2.使用unittest.TestCase來創建測試
3.控制測試執行
4.使用unittest.TestSuite
5.4 為應用程序編寫單元測試
5.4.1 創建測試包
5.4.2 為單元測試創建新的類
5.4.3 第1個單元測試——受傷方的選擇
5.4.4 運行第1個單元測試
5.4.5 第2個單元測試——占領木屋
只運行第2個單元測試
5.4.6 創建自己的測試模塊
5.4.7 批量執行單元測試
5.5 使用模擬庫的單元測試
5.5.1 Mock的簡介
5.5.2 讓我們開始Mock吧
5.5.3 在單元測試中使用Mock對象
5.5.4 使用補丁
在單元測試中使用補丁
5.5.5 第3個單元測試——play方法
5.6 你的代碼被覆蓋到了嗎
解決導入錯誤
5.7 其他單元測試工具
5.7.1 Doctest
5.7.2 Nose
5.7.3 Pytest
5.8 重構的前導
繞個彎路——可測試性重構
5.9 重構
5.9.1 什么是重構
5.9.2 為什么要進行重構
5.9.3 何時進行重構
5.9.4 如何進行重構
1.重命名
2.提取
5.9.5 移動
1.下降
2.提升
3.Python的重構工具
5.10 重新審視單元測試
5.10.1 可測試化重構
5.10.2 第4個單元測試——setup_game_scenario
5.11 練習
重構和重新設計練習
5.12 小結
6 設計模式
6.1 設計模式的介紹
設計模式的分類
1.行為模式
2.構建模式
3.結構模式
4.並行模式
6.2 Python語言和設計模式
6.2.1 一級函數
6.2.2 類作為一級對象
6.2.3 閉包
6.2.4 各種特性
1.類方法
2.抽象方法
3._ getattr _方法
6.2.5 鴨子類型
6.3 本章余下內容的結構
6.4 快進——獸人之襲 v6.0.0
6.5 策略模式
6.5.1 策略場景——跳躍特性
6.5.2 策略——主要的問題
6.5.3 策略——嘗試解決方案
6.5.4 策略——重新考慮設計
6.5.5 策略方案1——傳統方法
6.5.6 策略方案2——Python方法
6.6 簡單工廠
6.6.1 簡單工廠場景——招募特性
6.6.2 簡單工廠——主要的問題
6.6.3 簡單工廠——重新考慮設計
6.6.4 簡單工廠方案1——傳統方法
6.6.5 簡單工廠方案2——Python方法
6.7 抽象工廠模式
6.7.1 抽象工廠場景——飾品店
6.7.2 抽象工廠——主要的問題
6.7.3 抽象工廠——重新考慮設計
進一步簡化設計
6.7.4 抽象工廠方案——Python方法
高級話題——強制使用接口
6.8 適配器模式
6.8.1 適配器模型——精靈的遠房親戚
6.8.2 適配器——主要的問題
6.8.3 適配器——嘗試解決方案
6.8.4 適配器解決方案——Python方法
適配器——多適配器方法
6.9 小結
7 性能——識別瓶頸
7.1 關於性能的三章概覽
7.1.1 更注重運行時的性能
7.1.2 關於性能的1個
7.1.3 關於性能的2個
7.1.4 關於性能的3個
7.1.5 看一下應用性能提升
7.2 游戲場景——尋找黃金
7.2.1 頂層算法
7.2.2 查看最初的代碼
7.2.3 運行代碼
7.3 主要的問題
7.4 識別瓶頸
7.4.1 衡量執行時間
7.4.2 監測代碼片段的運行時間
7.4.3 代碼分析
1.cProfile模塊
2.pstats模塊
3.line_profiler包
7.5 內存分析
memory_profiler包
7.6 算法效率和復雜度
7.6.1 算法效率
7.6.2 算法復雜度
7.7 大O符號
大O復雜類
1.O(1)——常數時間
2.O(log n)——對數
3.O(n)——線性時間
4.O(n log n)——對數線性
5.O(n2)——二次方
6.O(n3)——立方
7.復雜度的上限
8.常見數據結構和算法的復雜性
9.結束關於大O的討論
7.8 小結
8 性能優化1
8.1 本章的前提
8.2 本章的組織方式
8.3 回顧“尋找黃金”的場景
8.3.1 選擇問題的數據大小
8.3.2 分析最初的代碼
8.4 優化“尋找黃金”——第1部分
8.4.1 調整算法——平方根
“尋找黃金”優化——優化一
8.4.2 跳過點操作符
“尋找黃金”優化——優化二
8.4.3 使用本地范圍
“尋找黃金”優化——優化三
8.5 性能優化的一些事項
8.5.1 列表推導式
8.5.2 記錄執行時間
8.5.3 字典推導式
8.5.4 交換條件塊和for循環
8.5.5 在循環中使用try語句
8.5.6 選擇正確的數據結構
8.5.7 collections模塊
1.deque類
2.defaultdict類
8.5.8 生成器和生成器表達式
1.生成器表達式
2.比較內存效率
3.生成器表達式還是列表推導式呢
8.5.9 itertools模塊
itertools.chain迭代器
8.6 練習
8.7 小結
9 性能優化2——NumPy和並行化
9.1 本章的先決條件
9.2 本章的組織方式
9.3 NumPy的簡介
9.3.1 安裝NumPy
9.3.2 創建數組對象
9.3.3 簡單的數組操作
9.3.4 數組切割和索引
1.索引
2.切割
9.3.5 廣播
9.3.6 其他功能
1.numpy.ndarray.tolist
2.numpy.reshape
3.numpy.random
4.numpy.dstack
5.numpy.einsum
6.使用einsum來計算距離的平方
9.3.7 從哪里能獲得更多關於NumPy的信息
9.4 優化“尋找黃金”——第2部分
9.4.1 “尋找黃金”優化——優化四
9.4.2 “尋找黃金”優化——優化五
9.5 使用multiprocessing模塊的並行化
9.5.1 並行化簡介
1.共享內存並行化
2.分布式內存並行
9.5.2 全局解釋器鎖
9.5.3 multiprocessing模塊
Pool類
9.6 “尋找黃金”程序並行化
9.6.1 重訪黃金領地
9.6.2 “尋找黃金”優化——優化六,並行化
其他並行化的方法
9.7 進一步閱讀
JIT編譯器
GPU加速計算
9.8 小結
10 簡單的圖形應用程序
10.1 GUI框架概述
10.1.1 Tkinter
10.1.2 PyQt
10.1.3 PySide
10.1.4 Kivy
10.1.5 wxPython
10.2 GUI編程設計注意事項
10.2.1 了解用戶的需求
10.2.2 開發用戶故事
10.2.3 簡單性和可訪問性
10.2.4 一致性
10.2.5 可預測性和熟悉性
10.2.6 其他設計考慮
10.3 事件驅動編程
10.3.1 事件
10.3.2 事件處理
10.3.3 事件循環
10.4 使用Tkinter進行GUI編程
10.4.1 Tkinter的文件鏈接
10.4.2 Tkinter中的mainloop()
10.4.3 簡單GUI應用程序——第1步
10.4.4 簡單GUI應用程序——第2步
10.4.5 Tkinter中的GUI控件
10.4.6 布局管理
1.網格布局管理器
2.包幾何管理器
3.位置幾何管理器
10.4.7 Tkinter中的事件
1.事件類型
2.事件描述器
3.事件對象屬性
10.4.8 Tkinter中的事件處理
1.命令回調(按鈕控件)
2.bind()方法
3.bind_class()方法
4.bind_all()方法
10.5 項目1——獸人之襲 v10.0.0
10.5.1 游戲場景
10.5.2 問題聲明
10.5.3 編寫代碼
1.看一下HutGame類
2._ init _方法
3.occupy_huts方法
4.create_widgets方法
5.setup_layout方法
6.radio_btn_pressed方法和enter_hut方法
7.announce_winner方法
10.5.4 運行應用程序
10.6 MVC架構
10.6.1 模型
10.6.2 視圖
10.6.3 控制器
10.6.4 MVC的好處
10.7 項目2——獸人之襲 v10.1.0
10.7.1 重新修改HutGame類
10.7.2 創建MVC類
10.7.3 MVC對象間的通信
1.控制器到模型或視圖的通信
2.模型到控制器的通信
3.PyPubSub包
4.視圖到控制器的通信
5.視圖和模型間的通信
10.7.4 查看代碼
Controller類
10.7.5 Model類
10.7.6 View類
10.7.7 運行應用程序
10.8 測試GUI應用程序
測試注意事項
1.單元測試和MVC
2.手動測試
3.自動GUI測試
10.9 練習
10.10 擴展閱讀
10.11 小結
思維導圖
防止博客圖床圖片失效,防止圖片源站外鏈:
http://www.processon.com/chart_image/5e5b2da6e4b0541c5e148a91.png)
思維導圖在線編輯鏈接: