-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Python編程實戰:運用設計模式、并發和程序庫創建高質量程序

( 簡體 字)
作者:(美) Mark Summerfield類別:1. -> 程式設計 -> Python
譯者:
出版社:機械工業出版社Python編程實戰:運用設計模式、并發和程序庫創建高質量程序 3dWoo書號: 39210
詢問書籍請說出此書號!

缺書
NT售價: 345

出版日:8/1/2014
頁數:252
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111473947
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

有志于拓展及深化Python知識的讀者,它將教你如何改進Python程序的質量、可靠性、速度、可維護性以及可用性。書中包含大量實用的范例與思路,可幫助大家提升Python編程水平。

本書有四大主題:用設計模式編寫出優雅的代碼、用并發和“編譯過的Python”(也就是Cython)提升處理速度、高級網絡編程,以及圖形。

《Design Patterns: Elements of Reusable Object-Oriented Software》(詳情參見附錄B)一書雖然早在1995年就出版了,然而時至今日,依然深刻地影響著面向對象編程這一領域。本書從Python語言的角度重新審視前書所提到的每種設計模式,給出實用的Python范例,并解釋為何Python程序員用不到某些模式。這些模式在第1章、第2章及第3章中講解。

Python的GIL(Global Interpreter Lock,全局解釋器鎖)會阻止Python代碼同時在多個處理器核心上運行。于是有人就誤以為Python不支持多線程,或無法發揮多核硬件的優勢。對于“計算密集型”(CPU-bound)程序來說,可以用multiprocessing模塊實現并發,該模塊不受GIL限制,可以完全利用每個核心。這樣一來,處理速度就很容易提高了(大致同CPU的核心數成正比)。對于“I/O密集型”程序來說,我們既可以用multiprocessing模塊來做,也可以用threading模塊或concurrent.futures模塊來做。實際上,使用threading模塊來編寫I/O密集型程序時,并不用擔心由GIL所帶來的開銷,因為網絡延遲的影響更大。

遺憾的是,在編寫并發程序時,如果采用低級與中級方式,那么非常容易出錯,任何編程語言都有這種問題。要想少出錯,就不要使用“顯式鎖”(explicit lock),而是改用Python的queue及multiprocessing模塊,這些模塊提供了封裝程度較高的“隊列”(queue),此外,也可以改用concurrent.futures模塊來做。第4章會告訴大家如何用封裝程度較高的并發技術來大幅提高程序性能。

某些程序員之所以使用C、C++或其他“編譯型語言”(compiled language)來編程,是因為他們還有另外一個錯誤的想法,那就是Python程序運行得很慢。一般來說,Python確實要比編譯型語言慢,但在目前的硬件上面,用Python語言所編寫的絕大部分應用程序的運行速度都足夠快。即便有時Python程序真的不夠快,我們也可以一邊享受用Python編程所帶來的好處,一邊想辦法提升其運行速度。

如果要給某些長期運行的程序提速,那么可以使用PyPy這款Python解釋器(網址是pypy.org)。這是一種“即時編譯器”(just-in-time compiler),可以極大提升程序執行速度。另外一種優化執行效率的方式是調用運行速度與編譯后的C程序相仿的代碼,對于“計算密集型”程序來說,用這種代碼改寫后,其執行速度很容易變成原來的100倍。要想使Python程序運行得和C程序一樣快,最簡單的辦法就是調用那種底層以C語言來實現的Python模塊。比方說,標準庫里的array模塊或第三方numpy模塊都能飛快地處理數組,并且很省內存(多維數組可以用numpy來處理)。除此之外,還可以使用標準庫的cProfile模塊來探查程序的瓶頸,并用Cython來寫對速度要求很高的那部分代碼。這種寫法實際上就是一套“增強版Python語言”(enhanced Python):寫好的程序可以編譯成純C,從而使運行速度提升到極致。

當然,有時候我們所需的功能已經由現成的C或C++庫實現好了,或者由采用“C語言調用約定”(C calling convention)的其他語言程序庫實現好了。在大多數情況下,都能找到第三方Python模塊來訪問我們所需的那些程序庫,這些模塊可以在Python Package Index(簡稱PyPI,網址是pypi.python.org)里找到。不過在個別情況下可能找不到這種模塊,此時可以用標準庫的ctypes模塊或第三方的Cython包來調用C程序庫里的功能。采用已經實現好的C程序庫來編寫代碼能夠極大減少開發時間,而且C代碼的運行速度也相當快。第5章講解ctypes與Cython。

Python標準庫提供了許多用于網絡編程的模塊,比如底層的socket模塊、中層的socketserver模塊,以及高層的xmlrpclib模塊。把用其他語言所寫的代碼移植到Python時,可能會用到底層與中層網絡模塊,然而直接用Python編程時,通常不需要理會那些底層的細節,只需要用高層模塊來實現所需的網絡功能即可。第6章講解如何使用標準庫中的xmlrpclib模塊以及功能強大且易用的第三方RPyC模塊。

每個程序差不多都要提供某種用戶界面,使用戶可通過它來向程序下達指令。可以用argparse模塊來編寫Python程序,使其支持命令行界面;也可以用其他模塊來編寫,使其支持完整的終端用戶界面(例如,在Unix系統上,可用第三方urwid包實現這種界面,此包的網址為excess.org/urwid)。此外,有許多Web框架能夠實現出Web界面,比如輕量級的bottle框架(網址是bottlepy.org)、重量級的Django框架(網址是www.djangoproject.com)與Pyramid框架(網址是www.pylonsproject.org)。當然,除了上面說的這幾種界面外,還可以創建具有“圖形用戶界面”(Graphical User Interface,GUI)的Python應用程序。

經常聽到“Web程序將取代GUI程序”這種說法,不過現在還沒發展到那一步。實際上,用戶可能更喜歡GUI程序,而不是Web程序。比方說,在21世紀初智能手機剛開始流行時,用戶總是愛用專門制作好的“app”而不是瀏覽器中的網頁來處理日常事務。有許多第三方Python包都可用來編寫GUI程序。本書第7章要介紹的Tkinter包位于Python標準庫里,該章會告訴大家如何用它創建樣式新潮的GUI程序。

目前大多數計算機(包括筆記本電腦及部分智能手機)都配有功能強大的圖形渲染硬件,這種硬件通常是獨立的GPU(Graphics Processing Unit,圖形處理單元),能夠繪制出絢麗的二維及三維圖形。而大多數GPU都支持OpenGL API,所以Python程序員可以通過第三方包來調用這套API。第8章將會講解怎樣用OpenGL繪制三維圖形。

本書旨在演示如何編寫更好的Python程序,如何寫出效率高、易維護且易于使用的Python代碼。閱讀之前,需要有Python編程基礎,因為此書是寫給已經學會Python語言用法的讀者看的,大家應該已經讀過Python的開發文檔或是類似教程了,比如《Programming in Python 3, Second Edition》(詳情參見附錄B)等書。而這本書將提供一些有助于提升Python編程水平的思路、靈感與實用技巧。

本書全部范例代碼都在Linux系統的Python 3.3版本下測試通過(筆者也盡量在Python 3.2及Python 3.1版本下測試過了),絕大部分代碼還能在OS X與Windows操作系統中運行。可從本書網站www.qtrac.eu/pipbook.html下載范例代碼,這些代碼也應該能在后續的Python 3.x版本下運行。

致謝

與寫其他技術書籍時一樣,筆者寫這本書時也得到了大家的諸多建議、幫助及鼓勵,在此深表謝意。

Nick Coghlan從2005年起成為Python的核心開發者,他提供了大量建設性的批評意見,并展示了許多想法及代碼片段,以此表明書中所講的某些內容還有更好的實現方式。Nick對筆者改進本書內容幫助極大,尤其是前面幾章。

Doug Hellmann是資深Python開發者與技術作者,他給筆者寫了許多條非常有用的評論,從成書之前的出版提案到成書之后正文里的每一章都是如此。Doug還給筆者提供了許多思路,并為本書撰寫了序。

兩位友人Jasmin Blanchette與Trenton Schulz都是有經驗的Python程序員,他們各自的研究方向迥然不同,但都位于本書所講的范圍之內。Jasmin與Trenton反饋了許多意見,使筆者能夠據此改寫正文及范例代碼中的許多不夠明晰之處。

感謝策劃編輯Debra Williams Cauley,在成書過程中,他再次向我提供了支持和幫助。

感謝Elizabeth Ryan精心管理了本書的出版流程,感謝Anna V. Popick出色的校對工作。

最后,一如往常,感謝妻子Andrea的關愛與支持。
內容簡介:

簡介
本書由Python開發者社區知名技術專家Mark Summerfield親筆撰寫,全球資深Python專家Doug Hellmann作序鼎力推薦,是Python領域最有影響力的著作之一。書中通過大量實用的范例代碼和三個完整的案例研究,全面而系統地講解了如何運用設計模式來規劃代碼結構,如何通過并發與Cython等技術提升代碼執行速度,以及如何利用各種Python程序庫來快速開發具體的應用程序和游戲。
本書共8章:第1~3章分別介紹了Python的幾種設計模式(創建型設計模式、結構型設計模式和行為型設計模式);第4章和第5章詳細講解了Python的高級并發技術以及Cython的用法;第6章具體介紹了Python的高級網絡編程;第7章闡釋了如何用Tkinter開發圖形用戶界面;第8章講解了如何用OpenGL繪制3D圖形。



無論是有經驗的老程序員,還是正在尋求自我提升的新手,都能通過書中的寶貴建議及實用范例來提高編程技能。作者引領大家從不同的角度思考問題,介紹各種開發工具并詳細講述各項開發技巧,使大家能夠創建出更為高效的解決方案。
—— Doug Hellmann,DreamHost公司資深開發者

只要你有一定的Python編程經驗,本書就能幫助你改進Python程序的代碼質量、穩定性、運行速度、可維護性及可用性。
Mark Summerfield是Python開發者社區的知名技術作家,在本書中,他借助高質量的范例代碼和3個完整案例研究,全方位系統講解如何借助設計模式寫出優雅的代碼,如何通過并發技術及編譯過的Python程序(也就是Cython)來提升處理速度,如何進行高級網絡編程,以及如何繪制圖形界面與三維圖形,并且還解釋了為何某些面向對象的設計模式在Python里用不到。此外,作者還用多個實例證明Python并不是一門效率低下的語言——只要善用并發和Cython技術,就能完全發揮多核CPU的優勢,從而編出運行速度非常快的Python程序來。
本書涉及的所有代碼都已在Linux操作系統里測試過,而且絕大部分代碼也在OS X及Windows系統中測試過。

本書主要內容:
在Python程序中有效地利用創建型設計模式、結構型設計模式和行為型設計模式的優勢。
用多進程技術、多線程技術和concurrent.futures模塊來編寫并發式Python程序。
在無須手工加鎖的前提下,使用“線程安全的隊列”及future來避免并發環境中的各種問題。
用xmlrpclib和RPyC等高級模塊來簡化網絡編程。
用Cython、基于C的Python模塊、性能分析工具等技術來提升Python代碼的執行速度。
用Tkinter創建新式GUI應用程序。
通過pyglet和PyOpenGL來調用OpenGL API,以發揮出計算機硬件所具備的強大圖形處理能力。
目錄:

譯者序



前言

第1章 Python的創建型設計模式 1

1.1 抽象工廠模式 1

1.1.1 經典的抽象工廠模式 2

1.1.2 Python風格的抽象工廠模式 4

1.2 建造者模式 6

1.3 工廠方法模式 12

1.4 原型模式 18

1.5 單例模式 19

第2章 Python的結構型設計模式 21

2.1 適配器模式 21

2.2 橋接模式 26

2.3 組合模式 31

2.3.1 常規的“組合體/非組合體”式層級 32

2.3.2 只用一個類來表示組合體與非組合體 35

2.4 修飾器模式 37

2.4.1 函數修飾器與方法修飾器 38

2.4.2 類修飾器 42

2.5 外觀模式 47

2.6 享元模式 52

2.7 代理模式 54

第3章 Python的行為型設計模式 58

3.1 責任鏈模式 58

3.1.1 用常規方式實現責任鏈 59

3.1.2 基于協程的責任鏈 60

3.2 命令模式 63

3.3 解釋器模式 66

3.3.1 用eval()函數求表達式的值 67

3.3.2 用exec()函數執行代碼 70

3.3.3 用子進程執行代碼 73

3.4 迭代器模式 76

3.4.1 通過序列協議實現迭代器 77

3.4.2 通過雙參數iter()函數實現迭代器 77

3.4.3 通過迭代器協議實現迭代器 79

3.5 中介者模式 81

3.5.1 用常規方式實現中介者 82

3.5.2 基于協程的中介者 85

3.6 備忘錄模式 87

3.7 觀察者模式 87

3.8 狀態模式 91

3.8.1 用同一套方法來處理不同的狀態 93

3.8.2 用不同的方法來處理不同的狀態 94

3.9 策略模式 95

3.10 模板方法模式 98

3.11 訪問者模式 101

3.12 案例研究:圖像處理程序包 102

3.12.1 通用的圖像處理模塊 103

3.12.2 Xpm模塊概述 111

3.12.3 PNG包裝器模塊 113

第4章 Python的高級并發技術 116

4.1 計算密集型并發 119

4.1.1 用隊列及多進程實現并發 121

4.1.2 用Future及多進程實現并發 126

4.2 I/O密集型并發 128

4.2.1 用隊列及線程實現并發 129

4.2.2 用Future及線程實現并發 134

4.3 案例研究:并發式GUI應用程序 136

4.3.1 創建GUI 138

4.3.2 編寫與工作線程配套的ImageScale模塊 144

4.3.3 在GUI中顯示圖像處理進度 146

4.3.4 處理GUI程序終止時的相關事宜 148

第5章 擴充Python 150

5.1 用ctypes訪問C程序庫 151

5.2 Cython的用法 159

5.2.1 用Cython訪問C程序庫 159

5.2.2 編寫Cython模塊以進一步提升程序執行速度 164

5.3 案例研究:用Cython優化圖像處理程序包 169

第6章 Python高級網絡編程 173

6.1 編寫XML-RPC應用程序 174

6.1.1 數據包裝器 174

6.1.2 編寫XML-RPC服務器 178

6.1.3 編寫XML-RPC客戶端 180

6.2 編寫RPyC應用程序 188

6.2.1 線程安全的數據包裝器 188

6.2.2 編寫RPyC服務器 193

6.2.3 編寫RPyC客戶端 195

第7章 用Tkinter開發圖形用戶界面 199

7.1 Tkinter簡介 201

7.2 用Tkinter創建對話框 203

7.2.1 創建對話框式應用程序 205

7.2.2 創建應用程序中的對話框 212

7.3 用Tkinter創建主窗口式應用程序 220

7.3.1 創建主窗口 222

7.3.2 創建菜單 224

7.3.3 創建帶計分器的狀態欄 226

第8章 用OpenGL繪制3D圖形 229

8.1 用透視投影法創建場景 230

8.1.1 用PyOpenGL編寫Cylinder程序 231

8.1.2 用pyglet編寫Cylinder程序 235

8.2 用正交投影法制作游戲 238

8.2.1 繪制游戲場景 240

8.2.2 判斷用戶是否選中了場景里的物體 242

8.2.3 處理用戶操作 244

附錄A 結束語 248

附錄B 參考書目摘錄 250
序: