Python程序设计开发宝典
上QQ阅读APP看书,第一时间看更新

前言
FOREWORD

作者第一次接触Python大概是在2002年,在几个著名的安全网站上看到有人用这个语言,当时的作者正痴迷于C语言和汇编语言,内心不屑于学习这种脚本语言。2010年的时候因为要用IDA Pro分析一个PE文件而不得不借助于IDAPython插件,才真正感觉到了Python的方便与强大,于是购买了很多书籍并且阅读了大量在线文档开始系统地学习Python。2013年学校组织各专业教研室修订新版人才培养方案时,经过慎重考虑并且与其他几位老师进行了多次沟通,最终确定为数字媒体技术专业和服务外包专业增加了“Python程序设计”这门课程。然而,虽然当时市面上已经有了一些Python书籍,但是适合作为教材的却寥寥无几,有的过于专注某个专业领域,有的则是泛泛地介绍一点皮毛,并且很多书里放置的插图占用了大量篇幅,知识密度很小,不是作者喜欢的风格。在翻看了超过20本Python图书以后,作者决定动手写一本适合作教材的书,于是就有了面向计算机及相关专业的《Python程序设计》(书号为9787302407232,2015年8月出版)和面向非计算机专业的《Python程序设计基础》(书号为9787302410584,2015年8月出版,2016年3月第2次印刷,2017年1月第3次印刷),前者主要介绍Python 2.7.x的基本语法以及在各领域的应用,后者主要介绍Python 3.4.x的基本语法而没有涉及太多的应用。本来当时写这两本书的目的仅仅是为了自己上课用起来方便,然而出版不到一年就被近30所院校选作教材,还有几十所院校的图书馆也采购了这两本书供学生借阅,反响非常好。应广大读者和用书老师的要求,也为了紧跟Python飞速发展的步伐,作者于2016年6月又出版了《Python程序设计(第2版)》(书号为9787302436515),这本书使用Python 3.5.x重写了第1版中的所有案例,并且新增案例近百个,出版后迅速被多所院校选作教材,各大网上书店也频频缺货,2016年11月初进行了第2次印刷,2017年3月进行了第3次印刷。考虑到更多的Python爱好者并没有听老师讲课的机会,看教材自学可能比较吃力,作者于2017年1月份出版了《Python可以这样学》(书号为9787302456469),全书500多页,使用生动活泼的语言讲解Python 3.5.x的知识和应用(绝大部分内容也适用于Python 3.6.x和Python 3.7.x),在《Python程序设计(第2版)》的基础上删掉了“软件分析与逆向工程”和“安卓平台的Python编程”内容,新增了大量案例,并且融入了道德经、周易、太极拳理论中的核心思想以及大量中外名人名言,通过小提示、小技巧、注意、拓展知识等多种形式扩充了大量知识,尤其适合Python爱好者自学,也可作为进阶工具书进行查阅。该书出版之后迅速得到社会各界人士的一致认可,第一批印刷的书很快被抢购一空,不到两个月就进行了第二次印刷。回头想想,自己二十年如一日地每天熬夜看书学习写代码还是值得的。

当2016年6月份作者前几本Python系列图书的责任编辑白立军老师约作者再编写一本面向高级程序员的Python图书时,说实话,内心是喜悦的,很高兴自己的努力得到广大Python爱好者的认可。但同时作者内心也有些担心,感觉在写前4本书时已经用完了自己的洪荒之力。在这本新书里再写点什么好呢?内容该如何组织呢?如何避免过多地重复利用前几本书里的案例呢?反复思考了近2个月,考虑目前很多Python程序员的现状:喜欢直接使用各种扩展库来解决问题,不重视对Python语言本身的理解,内功不够深厚,导致很多代码粗制滥造。最终作者做出决定,在这本新书里,不再介绍太多扩展库的应用,而是把重点放在Python语法和内置对象、标准库对象的高级应用上,注重Python的内涵,注重内功的修炼,尽量往纵深发展,争取用最简练的语言介绍那些作者认为比较高级的用法。在编写过程中,尽量减少与前几本书中内容的重复,补充大量新案例和高级用法。当然,前面几本书里的有些案例在这本书里又出现了,但是仔细的读者应该能发现,很多案例代码都进行了必要的改写和优化,更加Pythonic,更加优雅和高效。自从答应了写这本书之后,作者在不影响正常教学和科研工作的情况下每天拿出至少10个小时查阅资料、编写代码或者整理书稿,前后用了一年左右的时间,现在回头想想也挺值得,在整理资料和编写案例代码的同时作者自己也进步了很多,对Python有了更加深入的认识和理解。

内容组织与阅读建议

全书共13章,面向Python 3.5.x、Python 3.6.x和Python 3.7.x,重点关注Python内置对象和标准库对象的高级应用,以及比较前沿的、刚刚引入的一些新技术和新特性的用法,偶尔涉及一些扩展库用法。几乎每个知识点都配有大量的案例,把这些案例简单拼凑和集成就可以实现很多功能,实用性非常强。建议读者按章节顺序阅读,并且前后结合地反复阅读,不要随意跳过任何内容,或许不经意间会发现自己正需要的知识或者得到某种灵感。另外,虽然本书的定位是Python高级编程,但也同样适用于初学者,请初学者不要觉得有压力,如果有些地方暂时看不懂,可以先跳过去,或许过几天再看就明白了。当然,如果实在看不懂的话,及时和作者沟通应该会得到帮助。

第1章 管中窥豹:Python概述。介绍Python语言的特点与主流版本,编程规范与代码优化建议,虚拟开发环境的创建与配置,扩展库的安装方法,开发与发布自己的包,Python程序伪编译与打包,从命令行和外部文件获取配置信息。

第2章 万丈高楼平地起:运算符、表达式与内置对象。详细介绍Python的运算符与内置函数的用法,以及变量与常量的概念。

第3章 玄之又玄,众妙之门:详解Python序列结构。详解列表、元组、字典、集合等对象的特点与用法,列表推导式、生成器推导式、字典推导式与集合推导式,切片操作,序列解包,枚举、数组、队列、堆等常用结构用法。

第4章 反者,道之动:程序控制结构。详解Python中的选择结构和循环结构,else的几种用法,选择结构的多种实现方式,break与continue语句,循环结构的代码优化技巧。

第5章 代码复用技术(一):函数。详解函数的定义与嵌套定义语法,可调用对象与修饰器原理,位置参数、默认值参数、关键参数以及参数的序列解包,局部变量、全局变量与nonlocal变量,生成器函数,lambda表达式,函数柯里化,泛型函数,协程函数,回调函数。

第6章 代码复用技术(二):面向对象程序设计。详解类的定义语法与实例化方法,数据成员、成员方法、属性以及静态方法与类方法,继承与多态,依赖注入技术的Python实现,特殊成员重写与运算符重载。

第7章 文本处理(一):字符串。详解字符串编码与字符串格式化方法、字符串对象方法、文本排版与压缩、分词、汉字拼音有关的技术。

第8章 文本处理(二):正则表达式。详解正则表达式基本语法与扩展语法,正则表达式模块re的用法,正则表达式对象与match对象的用法。

第9章 数据永久化:文件内容操作。详解内置函数open()与上下文管理语句with的用法,文本文件与二进制文件的操作,Excel、Word、zip、rar等常见二进制文件操作技术。

第10章 文件与文件夹操作。详解os、os.path、shutil、glob、fnmatch等模块在文件与文件夹操作方面的用法。

第11章 代码质量保障:异常处理结构、程序调试与测试。详解异常处理结构,文档测试与单元测试技术,覆盖测试与软件性能测试技术,IDLE、pdb、Eclipse+Pydev等不同的代码调试技术。

第12章 多任务与并行处理:线程、进程、协程、分布式、GPU加速。详解多线程与多进程编程技术,线程与进程的同步技术,不同进程间数据交换与共享技术,协程,spark并行计算与GPU编程。

第13章 互通互联:asyncio提供的网络通信功能。详解asyncio提供的网络通信功能,重点介绍Transport、Protocol、StreamReader以及StreamWriter等类的用法。

配套资源

本书提供所有案例源代码,可以登录清华大学出版社网站(www.tup.com.cn)下载,或加入本书读者群(QQ群号456324891,加入时请注明是读者,如果这个群满了的话会在群简介中给出下一个群号)下载最新配套资源并与作者交流,当然也欢迎关注微信公众号“Python小屋”及时阅读作者写的最新案例代码,有些代码是在本书完稿之后新写的,是书上没有的,算作是一个很好的补充。

适用读者

• 已经具有一定Python水平的软件开发工程师。

• 打算深入探究Python高级编程的狂热爱好者。

• 各专业研究生、本科生、专科生的程序设计教材。

• 可能有些内容看起来会稍微有些吃力的其他Python初学者。

致谢

首先感谢父母的养育之恩,在当年那么艰苦的条件下还坚决支持我读书,没有让我像其他有的同龄的孩子一样辍学。感谢姐姐、姐夫多年来对我的爱护以及在老家对父母的照顾,感谢善良的弟弟、弟媳在老家对父母的照顾,正是有了你们,远离家乡的我才能安心工作。当然,最应该感谢的是妻子和孩子对我这个技术狂人的理解和宽容,这些年来她们已经习惯了正在吃饭的我突然萌发一个思路就放下饭碗去计算机前写代码的情景,习惯了我每个周末和假期都在教研室看书或写代码而不能陪她们玩,也习惯了周末的中午和晚上她们做好饭后再打电话催我回家。为了支持我的工作,她们还在我的几本书正式出版之前阅读了我的书稿。

感谢我的领导冯烟利教授提供了良好的教学科研环境,这样的工作环境让人觉得非常舒适,每个人都可以安心做好自己的事,发挥出最大潜力。

感谢选用Python程序设计系列教材的老师和长期关注微信公众号“Python小屋”的朋友以及系列图书读者QQ群里的朋友,感谢你们指出前几本书里存在的几个小错误,和你们的交流也给了我很多启发!

感谢每一位读者,感谢您在茫茫书海中选择了本书,衷心希望您能够从本书中受益,学到真正需要的知识!同时也期待每一位读者的热心反馈,随时欢迎您指出书中的不足!

本书在编写出版过程中也得到清华大学出版社的大力支持和帮助,尤其是非常有远见的责任编辑白立军老师对这套Python系列图书的策划,一并表示衷心的感谢。

董付国 于山东烟台

2017年3月