![](https://qzs.qzone.qq.com/ac/b.gif)
活动详情
1、转发积攒赠书。自2017年8月18日起,至2017年8月21日结束,为期4天。关注微信公众号“Python小屋”,找到公众号2017年8月18日的文章(内容与下文相同)连续4天转发到微信朋友圈,积攒总数超过200个以上,2017年8月22日上午12点之前将朋友圈截图发送至公众号消息,前45位朋友每人获得免费赠书一本,其中积攒最多的前5位朋友获赠的图书会有作者亲笔签名。
2、新书上架超低价优惠。清华大学出版社联合“赣江图书专营”淘宝店推出特价优惠活动,《Python程序设计开发宝典》原价69元,新书上架期间超低价39.8元,可以复制下面的链接使用浏览器打开查看图书详情和购买,如果显示“已下架”那么很可能是缺货了,请过几个小时再试试看。
-----------下面是正文----------------
继《Python程序设计》、《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》(该书已引入台湾发行繁体版)系列图书之后,狂热Python爱好者董付国老师的又一力作《Python程序设计开发宝典》正式出版,380页584千字巨献,已在天猫(清华大学出版社官方旗舰店)、亚马逊、京东、当当、互动出版网、淘宝等各大网上书店全面上架。本书适用于Python 3.5.x/3.6.x/3.7.x,侧重Python内功修炼,注重讲解Python内置对象、标准库对象的高级用法,完美诠释Pythonic真谛。语言精练,代码优雅,深入剖析Python编程模式。案例丰富,注释量大,实用性强。
《Python程序设计开发宝典》前言
我第一次接触Python大概是在2002年,在几个著名的安全网站上看到有人用这个语言,当时的我正痴迷于C语言和汇编语言,内心里是不屑于学习这种脚本语言的。2010年的时候因为要用IDA Pro分析一个PE文件而不得不借助于IDAPython插件,才真正感觉到了Python的方便与强大,于是购买了很多书籍并且阅读了大量在线文档开始系统地学习Python。2013年学校组织各专业教研室修订新版人才培养方案时,经过慎重考虑并且与其他几位老师进行了多次沟通,最终确定为数字媒体技术专业和服务外包专业增加了“Python程序设计”这门课程。然而,虽然当时市面上已经有了一些Python书籍,但是适合作为教材的却寥寥无几,有的过于专注某个专业领域,有的则是泛泛地介绍一点皮毛,并且很多书里放置的插图占用了大量篇幅,知识密度很小,不是我喜欢的风格。在翻看了超过20本Python图书以后,我决定动手写一本适合作教材的书,于是就有了面向计算机及相关专业的《Python程序设计》(2015年8月)和面向非计算机专业的《Python程序设计基础》(2015年8月出版,2016年3月第2次印刷,2017年1月第3次印刷),前者主要介绍Python 2.7.x的基本语法以及在各领域的应用,后者主要介绍Python 3.4.x的基本语法而没有涉及太多的应用。本来当时写这两本书仅仅是为了自己上课用起来方便,然而出版不到一年就被近三十所院校选作教材,出版社发行部提供的数据显示,还有几十所院校的图书馆也采购了这两本书供学生借阅,反响非常好。应广大读者和用书老师的要求,也为了紧跟Python飞速发展的步伐,我于2016年6月又出版了《Python程序设计》(第2版),这本书使用Python 3.5.x重写了第一版中的所有案例,并且新增案例近百个,出版后迅速被多所院校选作教材,各大网上书店也频频缺货,2016年11月初进行了第2次印刷,2017年3月进行了第3次印刷。考虑到更多的Python爱好者并没有听老师讲课的机会,看教材自学可能比较吃力,我于2017年1月份出版了《Python可以这样学》一书,全书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的内涵,注重内功的修炼,尽量往纵深发展,争取用最简练的语言介绍这些我认为比较高级的用法。在编写过程中,我尽量减少与前几本书中内容的重复,补充大量新案例和高级用法。当然,前面几本书里的有些案例在这本书里又出现了,但是仔细的读者应该能发现,很多案例代码都进行了必要的改写和优化,更加Pythonnic,更加优雅和高效。自从答应了写这本书之后,我在不影响正常教学和科研工作的情况下每天拿出至少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月
《Python程序设计开发宝典》目录
第1章管中窥豹: Python概述1
1.1Python是这样一种语言1
1.2Python版本之争1
1.3Python编程规范与代码优化建议2
1.4Python虚拟开发环境的搭建4
1.5Eclipse+PyDev环境搭建和使用4
1.6安装扩展库的几种方法6
1.7标准库与扩展库中对象的导入与使用7
1.7.1import 模块名 [as 别名]8
1.7.2from模块名import对象名[as别名]8
1.7.3from 模块名 import9
1.7.4模块导入时的搜索路径10
1.8编写与发布自己的包10
1.9Python程序伪编译与打包12
1.10从命令行参数和配置文件获取信息14
第2章万丈高楼平地起: 运算符、表达式与内置对象16
2.1Python常用内置对象16
2.1.1常量与变量17
2.1.2数字18
2.1.3字符串21
2.1.4列表、元组、字典、集合22
2.2Python运算符与表达式23
2.2.1算术运算符24
2.2.2关系运算符25
2.2.3成员测试运算符in与同一性测试运算符is26
2.2.4位运算符与集合运算符27
2.2.5逻辑运算符28
2.2.6矩阵乘法运算符@29
2.2.7补充说明29
2.3Python关键字简要说明30
2.4Python常用内置函数用法精要31
2.4.1类型转换与类型判断34
2.4.2最值与求和38
2.4.3基本输入输出40
2.4.4排序与逆序42
2.4.5枚举与迭代43
2.4.6map()、reduce()、filter()45
2.4.7range()48
2.4.8zip()48
2.4.9eval()、exec()49
第3章玄之又玄,众妙之门: 详解Python序列结构51
3.1列表: 打了激素的数组51
3.1.1列表创建与删除52
3.1.2列表元素访问53
3.1.3列表常用方法54
3.1.4列表对象支持的运算符59
3.1.5内置函数对列表的操作61
3.1.6使用列表模拟向量运算62
3.1.7列表推导式语法与应用案例63
3.1.8切片操作的强大功能70
3.2元组: 轻量级列表73
3.2.1元组创建与元素访问73
3.2.2元组与列表的异同点74
3.2.3生成器推导式75
3.3字典: 反映对应关系的映射类型76
3.3.1字典创建与删除77
3.3.2字典元素的访问77
3.3.3元素的添加、修改与删除79
3.3.4标准库collections中与字典有关的类80
3.4集合: 元素之间不允许重复81
3.4.1集合对象的创建与删除81
3.4.2集合操作与运算82
3.4.3不可变集合frozenset84
3.4.4集合应用案例84
3.5序列解包的多种形式和用法86
3.6标准库中的其他常用数据类型88
3.6.1枚举类型88
3.6.2数组类型89
3.6.3队列90
3.6.4具名元组92
3.6.5堆92
第4章反者,道之动: 程序控制结构94
4.1条件表达式94
4.2选择结构96
4.2.1单分支选择结构96
4.2.2双分支选择结构97
4.2.3多分支选择结构98
4.2.4选择结构的嵌套99
4.2.5构建跳转表实现多分支选择结构100
4.3循环结构100
4.3.1for循环与while循环100
4.3.2break与continue语句101
4.3.3循环代码优化技巧102
4.4精彩案例赏析103
第5章代码复用技术(一): 函数111
5.1函数定义与使用111
5.1.1基本语法111
5.1.2函数嵌套定义、可调用对象与修饰器113
5.1.3函数对象成员的动态性117
5.1.4函数递归调用117
5.2函数参数118
5.2.1位置参数120
5.2.2默认值参数120
5.2.3关键参数122
5.2.4可变长度参数122
5.2.5强制函数的某些参数必须以关键参数形式进行传值123
5.2.6强制函数的所有参数必须以位置参数形式进行传值124
5.2.7传递参数时的序列解包125
5.2.8标注函数参数与返回值类型126
5.3变量作用域127
5.3.1全局变量与局部变量127
5.3.2nonlocal变量130
5.4lambda表达式130
5.5生成器函数设计要点133
5.6偏函数与函数柯里化135
5.7单分发器与泛型函数136
5.8协程函数138
5.9注册程序退出时必须执行的函数140
5.10回调函数原理与实现140
5.11精彩案例赏析141
第6章代码复用技术(二): 面向对象程序设计167
6.1类的定义与使用167
6.1.1基本语法167
6.1.2type类168
6.1.3定义带修饰器的类169
6.2数据成员与成员方法171
6.2.1私有成员与公有成员171
6.2.2数据成员172
6.2.3成员方法、类方法、静态方法、抽象方法173
6.2.4属性175
6.2.5类与对象的动态性、混入机制177
6.3继承、多态、依赖注入179
6.3.1继承179
6.3.2多态181
6.3.3依赖注入技术的不同实现方法182
6.4特殊方法与运算符重载185
6.5精彩案例赏析187
6.5.1自定义队列187
6.5.2自定义栈191
6.5.3自定义集合193
6.5.4自定义数组199
6.5.5自定义双链表204
6.5.6自定义常量类206
6.5.7自定义不允许修改值的字典207
6.5.8自定义支持with关键字的类208
第7章文本处理(一): 字符串209
7.1字符串编码格式简介210
7.2转义字符与原始字符串211
7.3字符串格式化212
7.3.1使用%符号进行格式化212
7.3.2使用format()方法进行字符串格式化213
7.3.3格式化的字符串常量215
7.3.4使用Template模板进行格式化215
7.4字符串常用操作216
7.4.1find()、rfind()、index()、rindex()、count()216
7.4.2split()、rsplit()、partition()、rpartition()217
7.4.3join()219
7.4.4lower()、upper()、capitalize()、title()、swapcase()220
7.4.5replace()、maketrans()、translate()220
7.4.6strip()、rstrip()、lstrip()221
7.4.7startswith()、endswith()222
7.4.8isalnum()、isalpha()、isdigit()、isdecimal()、isnumeric()、
isspace()、isupper()、islower()222
7.4.9center()、ljust()、rjust()、zfill()223
7.4.10字符串对象支持的运算符224
7.4.11适用于字符串对象的内置函数226
7.4.12字符串对象的切片操作228
7.5其他有关模块228
7.5.1textwrap模块228
7.5.2zlib模块提供的压缩功能231
7.6字符串常量232
7.7可变字符串232
7.8中英文分词234
7.9汉字到拼音的转换235
7.10精彩案例赏析236
第8章文本处理(二): 正则表达式239
8.1正则表达式语法239
8.1.1正则表达式基本语法239
8.1.2正则表达式扩展语法240
8.1.3正则表达式锦集241
8.2直接使用正则表达式模块re处理字符串242
8.3使用正则表达式对象处理字符串246
8.4match对象248
8.5精彩案例赏析250
第9章数据永久化: 文件内容操作257
9.1文件操作基本知识258
9.1.1内置函数open()258
9.1.2文件对象属性与常用方法260
9.1.3上下文管理语句with261
9.2文本文件内容操作案例精选261
9.3二进制文件操作案例精选266
9.3.1使用pickle模块读写二进制文件267
9.3.2使用struct模块读写二进制文件268
9.3.3使用shelve模块操作二进制文件269
9.3.4使用marshal模块操作二进制文件270
9.3.5其他常见类型二进制文件操作案例271
第10章文件与文件夹操作281
10.1os模块281
10.2os.path模块284
10.3shutil模块286
10.4其他常用模块287
10.4.1glob模块287
10.4.2fnmatch模块288
10.5精彩案例赏析289
第11章代码质量保障: 异常处理结构、程序调试与测试293
11.1异常处理结构293
11.1.1异常的概念与表现形式293
11.1.2Python内置异常类层次结构294
11.1.3异常处理结构296
11.1.4断言与上下文管理语句301
11.2文档测试doctest301
11.3单元测试unittest304
11.4覆盖测试307
11.5软件性能测试308
11.6代码调试310
11.6.1使用IDLE调试310
11.6.2使用Eclipse+PyDev进行代码调试311
11.6.3使用pdb调试313
第12章多任务与并行处理: 线程、进程、协程、分布式、GPU加速318
12.1多线程编程318
12.1.1线程概念与标准库threading318
12.1.2线程对象320
12.1.3线程调度323
12.1.4Lock/RLock对象324
12.1.5Condition对象326
12.1.6Queue对象328
12.1.7Event对象332
12.1.8Semaphore与BoundedSemaphore333
12.1.9Barrier对象334
12.2多进程编程335
12.2.1进程创建与管理335
12.2.2进程同步技术336
12.2.3Pool对象337
12.2.4Manager对象341
12.2.5Listener与Client对象345
12.2.6进程间数据交换与共享345
12.2.7标准库subprocess348
12.3协程349
12.4concurrent.futures模块提供的并发执行功能351
12.5pySpark并行计算与分布式计算框架353
12.6GPU编程359
12.6.1使用pycuda实现GPU加速359
12.6.2使用pyopencl实现GPU加速360
12.6.3使用tensorflow实现GPU加速362
第13章互通互联: asyncio提供的网络通信功能364
13.1Transport类与Protocol类364
13.2StreamReader与StreamWriter369
附录精彩在继续373
附录A GUI开发373
附录B SQLite数据库操作376
附录C 计算机图形学编程377
附录D 图像编程380
附录E 数据分析、机器学习、科学计算可视化383
附录F 密码学编程383
附录G 系统运维384
附录H Windows系统编程384
附录I 软件分析与逆向工程386
参考文献388