首页>参考读物>计算机科学与技术>软件与程序设计

Python编程实战:运用设计模式、并发和程序库创建高质量程序
作者 : (美) Mark Summerfield 著
译者 : 爱飞翔 译
丛书名 : 华章程序员书库
出版日期 : 2014-08-04
ISBN : 978-7-111-47394-7
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 266
开本 : 16
原书名 : Python in Practice: Create Better Programs Using Concurrency, Libraries, and Patterns
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书主要关注了四个方面,即:优雅编码设计模式、通过并发和编译后的Python(Cython)使处理速度更快、高层联网和图像。书中展示了在Python中已经过验证有用的设计模式,用专家级的代码阐释了这些设计模式,并解释了为什么一些与面向对象设计相关的模式和Python均有关联。

图书特色

无论是有经验的老程序员,还是正在寻求自我提升的新手,都能通过书中的宝贵建议及实用范例来提高编程技能。作者引领大家从不同的角度思考问题,介绍各种开发工具并详细讲述各项开发技巧,使大家能够创建出更为高效的解决方案。
—— 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,以发挥出计算机硬件所具备的强大图形处理能力。


作者简介
Mark Summerfield Qtrac公司创始人,独立的培训讲师、顾问、技术编辑,Go、Python、C++、Qt和PyQt方面的技术作家。他撰写了大量畅销图书,包括《Rapid GUI Programming with Python and Qt》、《C++ GUI Programming with Qt 4, Second Edition》(与Jasmin Blanchette合著)、《Programming in Python 3, Second Edition》、《Advanced Qt Programming》和《Programming in Go》等。

译者简介
爱飞翔 资深软件开发工程师,擅长Web开发、移动开发和游戏开发,有10余年开发经验,曾主导和参与了多个手机游戏和手机软件项目的开发,经验十分丰富。业余爱好文学和历史,有一定的文学造诣。翻译并出版了《Android游戏开发实践指南》、《测试驱动的iOS开发》、《HTML5 Canvas核心技术:图形、动画与游戏开发》、《NoSQL精粹》和《JavaScript应用开发实践指南》等书。

内容简介
本书由Python开发者社区知名技术专家Mark Summerfield亲笔撰写,全球资深Python专家Doug Hellmann作序鼎力推荐,是Python领域最有影响力的著作之一。书中通过大量实用的范例代码和三个完整的案例研究,全面而系统地讲解了如何运用设计模式来规划代码结构,如何通过并发与Cython等技术提升代码执行速度,以及如何利用各种Python程序库来快速开发具体的应用程序和游戏。
本书共8章:第1~3章分别介绍了Python的几种设计模式(创建型设计模式、结构型设计模式和行为型设计模式);第4章和第5章详细讲解了Python的高级并发技术以及Cython的用法;第6章具体介绍了Python的高级网络编程;第7章阐释了如何用Tkinter开发图形用户界面;第8章讲解了如何用OpenGL绘制3D图形。

图书前言

本书面向有志于拓展及深化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的关爱与支持。

上架指导

计算机\程序设计

封底文字

“无论是有经验的老程序员,还是正在寻求自我提升的新手,都能通过书中的宝贵建议及实用范例来提高编程技能。作者引领大家从不同的角度思考问题,介绍各种开发工具并详细讲述各项开发技巧,使大家能够创建出更为高效的解决方案。”
——Doug Hellmann,DreamHost公司资深开发者

  只要你有一定的Python编程经验,本书就能帮助你改进Python程序的代码质量、稳定性、运行速度、可维护性及可用性。

  Mark Summerfield是Python开发者社区的知名技术作家,在本书中,他借助高质量的范例代码和3个完整案例研究,全方位系统讲解如何借助设计模式写出优雅的代码,如何通过并发技术及编译过的Python程序(也就是Cython)来提升处理速度,如何进行高级网络编程,以及如何绘制图形界面与三维图形,并且还解释了为何某些面向对象的设计模式在Python里用不到。此外,作者还用多个实例证明Python并不是一门效率低下的语言——只要善用并发和Cython技术,就能完全发挥多核CPU的优势,从而编出运行速度非常快的Python程序来。
  本书涉及的所有代码都已在Linux操作系统里测试过,而且绝大部分代码也在OS X及Windows系统中测试过,这些代码可从www.qtrac.eu/pipbook.html下载。

本书主要内容:

● 在Python程序中有效地利用创建型设计模式、结构型设计模式和行为型设计模式的优势。
● 用多进程技术、多线程技术和concurrent.futures模块来编写并发式Python程序。
● 在无须手工加锁的前提下,使用“线程安全的队列”及future来避免并发环境中的各种问题。
● 用xmlrpclib和RPyC等高级模块来简化网络编程。
● 用Cython、基于C的Python模块、性能分析工具等技术来提升Python代码的执行速度。
● 用Tkinter创建新式GUI应用程序。
● 通过pyglet和PyOpenGL来调用OpenGL API,以发挥出计算机硬件所具备的强大图形处理能力。

作者简介

(美) Mark Summerfield 著:暂无简介

译者简介

爱飞翔 译:暂无简介

译者序

由于Python语言的写法非常简洁,而且应用范围又很广泛,所以近年来吸引了很多开发者积极投身其中。Python语言的基础教程种类繁多,开发者的入门过程也特别快。在掌握了基础知识之后,许多程序员还想进一步提升自己的Python编程水平。这时主要会遇到三大问题。
第一是如何运用设计模式来规划代码结构,使之既易于修改,又易于维护;第二是如何通过并发及Cython等技术提升代码执行速度;第三是如何利用各种Python程序库来快速开发具体的应用程序和游戏。
针对这三大问题,本书都做了非常精彩的解答。作者把设计模式分为“创建型”、“结构型”与“行为型”三类,并分别比较了每种设计模式的传统用法与它在Python中的用法究竟有何异同。读者通过这部分讲解,可以学会如何在Python中简化或扩充传统的设计模式,也能明白为何有些模式在Python中无须使用。
许多开发者都想通过并发来提升程序性能,但由于要处理“资源竞争”、“加锁”等复杂的问题,所以并发式应用程序很容易出错,而本书作者则会告诉我们怎样利用queue及future等高级数据结构来避免这些错误,此外,他还辨析了多进程技术与多线程技术的适用场合。其后,作者又讲解了如何用Python来调用C或C++,并通过实例证明了Python并不是一门效率低下的语言——只要合理运用并发及Cython技术,照样可以写出速度很快的程序。
在具体的应用领域中,作者着重讲解了如何利用Python程序库来简化网络及图形编程,并把图形编程又细分为用户界面编程和三维图形编程。由于Python的程序库非常丰富,所以读者只要把学到的解题思路灵活地运用到自己的工作领域,并辅以适当的程序库,就能快速开发出符合需求的程序。
本书不仅提供了大量实用的范例代码,而且还有三个完整的案例研究。这三个案例再现了“设计—实现—优化”的全过程,并使我们领略到Python语言之美。
尽管本书作者认为读者应该有一定的Python基础,但Python其实是一门亲和力很高的语言,即便你对Python知之甚少,但只要用其他语言编过程序,也依然可以从for x in range(1,10): print(x)、(2, 3, 4) * 2、[9,8,7,6][1:3]等浅显易懂的写法中轻松得知循环、元组及列表等功能的用法。如果你想快速掌握Python语言,那不妨在开发文档的帮助下,试着直接读这本书。
总之,无论你是老手还是新手,本书都是学习Python的良好伴侣。相信大家在读完本书之后,应该能用其中的技术和思路把Python程序写得更加优秀。
翻译过程中,我得到了机械工业出版社华章分社诸位编辑与工作人员的帮助,在此深表感谢。
本书附有“中英文词汇对照表”,其中列出了相关词汇的各种译法,供大家参考。有兴趣的朋友可至机工新阅读网站(www.cmpreading.com)下载。由于时间仓促,译者水平有限,错误与疏漏之处在所难免,敬请读者批评指正。大家可发邮件至eastarstormlee@gmail.com与我联系,也可访问网页http://agilemobidev.com/eastarlee/book/python-in-practice留言。

爱飞翔

图书目录

译者序

前言
第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

教学资源推荐
作者: John R.Hubbard
作者: [美]加里·R. 赖特(Gary R. Wright),W. 理查德·史蒂文斯(W. Richard Stevens) 著
作者: (美)Mary Campione Kathy Walrath Alison Huml
参考读物推荐
作者: 潘红莲 杨光辉 张涛 夏坤庄 著
作者: (美)Marc Wandschneider 著
作者: (美)弗里茨·安德森(Fritz Anderson) 著