《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 导读

简介:

e4644a5e699956d6b581af7e82246b25dc28daf5

前  言

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

目  录

第1章 Python的创建型设计模式
1.1 抽象工厂模式
1.1.1 经典的抽象工厂模式
1.1.2 Python风格的抽象工厂模式
1.2 建造者模式
1.3 工厂方法模式
1.4 原型模式
1.5 单例模式

第2章 Python的结构型设计模式
2.1 适配器模式
2.2 桥接模式
2.3 组合模式
2.3.1 常规的“组合体/非组合体”式层级
2.3.2 只用一个类来表示组合体与非组合体
2.4 修饰器模式
2.4.1 函数修饰器与方法修饰器
2.4.2 类修饰器
2.5 外观模式
2.6 享元模式
2.7 代理模式

第3章 Python的行为型设计模式
3.1 责任链模式
3.1.1 用常规方式实现责任链
3.1.2 基于协程的责任链
3.2 命令模式
3.3 解释器模式
3.3.1 用eval()函数求表达式的值
3.3.2 用exec()函数执行代码
3.3.3 用子进程执行代码
3.4 迭代器模式
3.4.1 通过序列协议实现迭代器
3.4.2 通过双参数iter()函数实现迭代器
3.4.3 通过迭代器协议实现迭代器
3.5 中介者模式
3.5.1 用常规方式实现中介者
3.5.2 基于协程的中介者
3.6 备忘录模式
3.7 观察者模式
3.8 状态模式
3.8.1 用同一套方法来处理不同的状态
3.8.2 用不同的方法来处理不同的状态
3.9 策略模式
3.10 模板方法模式
3.11 访问者模式
3.12 案例研究:图像处理程序包
3.12.1 通用的图像处理模块
3.12.2 Xpm模块概述
3.12.3 PNG包装器模块

相关文章
|
3月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
106 1
|
2月前
|
人工智能 Linux 开发工具
Python从零到一:手把手带你写出第一个实用程序
Python语法简洁易懂,适合编程新手入门。它广泛应用于人工智能、自动化办公、Web开发等领域。学习Python可快速搭建项目,拥有丰富库支持和强大社区资源。通过本教程,你将掌握基础语法、环境搭建、程序逻辑控制及实战项目开发,开启编程之旅。
192 0
|
3月前
|
设计模式 人工智能 算法
Python设计模式:从代码复用到系统架构的实践指南
本文探讨了电商系统中因支付方式扩展导致代码臃肿的问题,引出设计模式作为解决方案。通过工厂模式、策略模式、单例模式等经典设计,实现代码解耦与系统扩展性提升。结合Python语言特性,展示了模块化、装饰器、适配器等模式的实战应用,并延伸至AI时代的设计创新,帮助开发者构建高内聚、低耦合、易维护的软件系统。
275 0
|
18天前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
87 5
|
9天前
|
设计模式 决策智能 Python
Python条件控制:让程序学会"思考"的魔法
本文深入浅出地讲解Python条件控制,从基础if语句到多分支、嵌套结构,再到简洁的三元表达式与Python 3.10新增的match-case模式匹配,结合电商折扣、会员等级、ATM系统等实战案例,全面掌握程序“智能决策”的核心逻辑。
161 0
|
3月前
|
设计模式 人工智能 算法
python 设计模式
工厂模式是一种创建型设计模式,通过定义创建对象的接口,将实例化延迟到子类,实现对象创建与使用的分离。它包括简单工厂模式、工厂方法模式和抽象工厂模式,适用于不同复杂度的对象创建场景,提高系统灵活性和可扩展性。
|
4月前
|
PyTorch 算法框架/工具 C++
人工智能算法python程序运行环境安装步骤整理
本教程详细介绍Python与AI开发环境的配置步骤,涵盖软件下载、VS2017安装、Anaconda配置、PyCharm设置及组件安装等内容,适用于Windows系统,助你快速搭建开发环境。
|
5月前
|
人工智能 并行计算 开发者
CUDA重大更新:原生Python可直接编写高性能GPU程序
NVIDIA在2025年GTC大会上宣布CUDA并行计算平台正式支持原生Python编程,消除了Python开发者进入GPU加速领域的技术壁垒。这一突破通过重新设计CUDA开发模型,引入CUDA Core、cuPyNumeric、NVMath Python等核心组件,实现了Python与GPU加速的深度集成。开发者可直接用Python语法进行高性能并行计算,显著降低门槛,扩展CUDA生态,推动人工智能、科学计算等领域创新。此更新标志着CUDA向更包容的语言生态系统转型,未来还将支持Rust、Julia等语言。
376 3
CUDA重大更新:原生Python可直接编写高性能GPU程序
|
5月前
|
调度 Python
探索Python高级并发与网络编程技术。
可以看出,Python的高级并发和网络编程极具挑战,却也饱含乐趣。探索这些技术,你将会发现:它们好比是Python世界的海洋,有穿越风暴的波涛,也有寂静深海的奇妙。开始旅途,探索无尽可能吧!
113 15
|
4月前
|
机器学习/深度学习 前端开发 API
python3如何使用QT编写基础的对话框程序
Qt与Python结合形成了PyQt/PySide,为桌面应用开发提供强大支持。通过简单安装PyQt5或PySide6,开发者可快速搭建跨平台GUI应用。本文从创建基础对话框入手,介绍布局管理、信号与槽机制、对话框模式及样式表美化等核心功能,并探讨模态窗口、事件驱动编程和资源打包等内容。最后,引导读者探索模型视图架构、多线程处理等进阶技术,逐步掌握用Python+Qt开发高效桌面应用的技能。
121 0

推荐镜像

更多