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

Python进阶编程:编写更高效、优雅的Python代码
作者 : 刘宇宙,谢东,刘艳 著
出版日期 : 2021-04-12
ISBN : 978-7-111-67850-2
定价 : 129.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 553
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
本书将帮助读者系统掌握编写高效、优雅的Python代码的方法,快速成长为一位高水平的Python开发工程师。
作者是Python编程领域的资深开发工程师,有多年的Python开发经验,本书得到了行业里15位技术专家的高度评价。
为了帮助读者编写出高效的Python代码,本书不仅从源代码的角度系统地讲解了Python的语法,让读者能知其然并知其所以然,而且结合具体的应用需求,对并发编程、性能优化、测试与调试、异常处理、内存管理等Python开发中的高级知识进行了详细的讲解。
为了指导读者编写出更优雅的Python代码,本书针对具体问题给出了大量的实例代码并给出了编码风格上的方法和建议。
如果你是没有Python编程经验的新人,你将通过本书系统掌握Python语法及其背后的原理,并从一开始就养成良好的编码习惯;如果你是有一定Python编程经验的老手,你将通过本书掌握各种Python编程中的高级知识,同时领略到优雅的编码风格和技巧。

图书特色

资深Python工程师撰写,15位行业专家高度评价并联袂推荐
基于Python新版本,从源码角度系统讲解Python语法、并发编程、性能优化、内存管理等进阶知识

图书前言

在编写本书之前,笔者已经出版了《Python 3.8 从零开始学》《Python实战之数据分析与处理》等多本Python基础方面的书。很多读者看后,通过邮件、QQ、微信等方式询问笔者是否有计划再写一本Python进阶的书。之前没有这样的意愿,一方面是因为Python进阶的书写起来不容易,需要长久的技术积累,另一方面是因为若编写不当,反而容易误导读者。
经过这些年的技术积累,以及很多项目的实践经验积累,笔者自认为可以编写一本关于Python进阶的书了。很庆幸,自己踏出了这一步,这才有了本书。
本书是一本偏实践型的书,建议读者在阅读的过程中多加实践,在实践过程中逐步形成自己的编程风格。作为研发人员,最大的乐事莫过于别人一看代码,就知道这是谁编写的。犹如大家评价雷军所编写的代码像诗般优美一样,希望读者在一番练习后,可以让同事一眼就识别出那是你独有风格的优美代码。
随着信息技术的不断发展,越来越多的公司开始进入以技术驱动的发展阶段。对于技术驱动型公司,就是需要在别人看不见的细节处做得极其精致。同时,在实践的过程中不要害怕出错,编程经验都是在不断尝试、不断更正错误的过程中逐步积累下来的。若能在这个过程中将遇到的一个又一个坑填平,他日回眸一看,身后必将填出一条康庄大道;若遇到坑就绕过或躲避,会看到身后依然满目疮痍。
遇到问题不要只局限于当前的层次思考问题,而是要尽量站在更高的层次,站在问题的制高点思考问题,这样你将看得更远,考虑问题也更加全面。
本书特色
结合Python的部分源码做讲解,让读者对整数、字符串、列表和字典等基础数据结构能知其然,并知其所以然。
结合实际应用需求,对一些问题做具体讲解。
配合大量操作示例,理论与实践结合。
基于Python 3.8编写,从Python最新版本入手。
致力于帮助读者编写更为高效和优雅的Python代码。
本书内容
本书共17章,各章内容安排如下。
第0章讲解Python的整体架构及源码组织形式,使读者对Python的实现有一个宏观的认识。
第1章讨论数字相关主题。
第2章讲解字符串的基础操作,如提取字符串、搜索、替换以及解析等。
第3章讲解Python中内置的数据结构,如列表、字典以及集合等。
第4章讲解Python中迭代对象的处理。
第5章讲解不同类型的文件处理。
第6章讲解使用Python处理不同编码格式的数据。
第7章讲解一些高级、不常见的函数定义与使用模式。
第8章讲解和类定义有关的常见编程模型。
第9章介绍元编程技术,并且通过示例展示如何利用该技术定制源码行为。
第10章讲解模块和包的常用编程技术,包括如何组织包,如何把大型模块分割成多个文件,如何创建命名空间包。
第11章讲解如何使用Python编写客户端程序来访问已有的服务,以及如何使用Python实现网络服务端程序。
第12章讲解并发编程的各种方法与技巧,包括通用的多线程技术以及并行计算的实现方法。
第13章讲解编写脚本时经常用到的一些功能,如解析命令行选项以及获取有用的系统配置数据等。
第14章讨论测试、调试和异常处理的常见问题。
第15章讲解Python中的内存管理机制。
第16章讲解提升Python运行效率的方法与实践。
读者对象
本书面向的读者对象为:
有一定基础的Python爱好者。
有Python基础,希望进一步提升编程能力的开发人员。
需要用到Python的运维人员。
开设Python相关课程的高校学生。
勘误
由于笔者能力有限,在编写过程中难免有错误之处。如果你在阅读过程中发现错误,不管是文本还是代码,希望告知笔者,笔者将不胜感激。这样既可以使其他读者免受同样问题的困扰,也可以帮助笔者在本书的后续版本中进行改进。
你可以通过以下方式与笔者联系:
邮箱地址:jxgzyuzhouliu@163.com。
CSDN留言地址:https://blog.csdn.net/youzhouliu/article/details/108329043。
GitHub地址:https://github.com/liuyuzhou/advanced_programming。
QQ群:893159718。
关于本书
本书的示例代码都是基于Python 3.8编写的,所以希望读者在根据示例进行操作时,使用的Python版本也是3.8及以上,那样可以避免很多因为版本不同所带来的问题。
致谢
本书在编写过程中参考了一些书,主要包括《Python Cookbook》《Python 高级编程》《Python 源码剖析》 《编写高质量代码:改善Python程序的91个建议》 《Python 3.8 从零开始学》等。在此,对这些书的作者表示感谢。
同时,感谢阅读我之前作品的很多读者,你们通过各种方式反馈的问题与建议,让笔者在编写本书的过程中避免了很多不当之处,衷心感谢你们无私的指正。
特别感谢机械工业出版社华章分社的策划编辑杨福川和责任编辑董惠芝,及参与本书其他审稿老师和设计人员,因为有你们的不断校稿和版面设计工作,才使得本书更好地呈现在读者面前。
感谢陈桂新和杨晨老师百忙之中帮忙写推荐序。和桂新老师相识于他创建的得心研习社,在那里我们探讨了许多有趣且有意义的话题,并认识了冯祯旺、肖力、冯聪颖、汤源、秦洁、李道兵等有趣的老师。
感谢冯祯旺、陈斌、施懿民、詹杰星、肖力、李道兵、曹洪伟、黄哲铿、秦洁、俞亚松、王晔倞、史海峰、刘璟宇老师的精彩推荐语。与陈斌、施懿民、詹杰星、曹洪伟、黄哲铿、俞亚松、王晔倞、史海峰、刘璟宇等老师相识于一次合作,虽然那次合作最后没能达到预期,但过程中的很多探讨让我受益颇丰。
最后感谢家人和朋友在写作期间给予的安静的写作环境,让笔者不被更多琐事打扰,从而专心写作。
感谢你们,没有你们的帮助与关心,本书不能如期完成。

刘宇宙
2021年1月

上架指导

计算机\程序设计

封底文字

如果说数据科学和人工智能是我们这个时代激动人心的技术,那么Python就是支撑它们发展的编程语言。学好Python,能够让你高效、灵活地解决包括机器学习和数据分析在内的很多问题。本书系统地讲解了Python语言,无论你是研发人员还是数据分析人员,甚至是非工程类人员,都能从中受益。
——陈斌 NETSTARS CTO

依托丰富的生态库,Python几乎可以“为所欲为”,但要编写高效而且优雅的Python代码不是一件轻松的事。从初学者到“知其然且知其所以然”,再到拥有Python编程风格的“老手”,有相当一段不平坦的路要走。让我们一边阅读,一边实践,探索高效而优雅的代码背后的逻辑。
——曹洪伟 百度DuerOS首席布道师
作为在运维领域深耕20年的“老兵”,从运维技术到运维管理,再到运维服务创业,深感运维如果不通过AI等自动化工具来武装自己、赋能他人,就可能会逐步成为被武装的“产业工人”。本书有大量的实践案例,值得广大有志于开发出高效、高性能平台的运维和开发人员学习。
——冯祯旺 新钛云服创始人、原盛大游戏运维总监?

随着信息化的不断发展,编程正在成为一项必备技能。Python作为具有代表性的编程语言,值得大家都去做一些了解。这本书是很好的进阶教程,相信可以在Python进阶路上助你一臂之力。
——黄哲铿 《技术人修炼之道》作者/前1药网技术副总裁

Python应用极其广泛,你是否想了解它背后的原理和实现机制?是否想了解各个框架如何利用元编程提升语言的表达能力,并且用在自己的项目上?是否想在遇到Bug时能有更系统的定位方法与解决技巧?相信你看完这本书后,能找到这些问题的答案,也能让你对Python的驾驭能力再上一个台阶。
——李道兵 奈雪的茶高级研发总监

作者简介

刘宇宙,谢东,刘艳 著:作者简介
刘宇宙
资深开发工程师,目前就职于一家知名的头部人工智能企业,从事Python开发多年,积累了丰富的经验。
先后从事卡系统、IaaS平台、大数据系统、物联网系统、网络爬虫软件、图像处理和自然语言处理相关的项目的研发,现从事人工智能平台的研发。
出版过多部Python编程和数据分析方面的著作,深受读者欢迎。

推荐序

Foreword 1 推荐序一
一次偶然的机会宇宙加入我组织的得心研习社,我们一起研读中国传统文化。我逐渐了解到宇宙是一个极其自律且有恒心的人,平时发言很懂得照顾别人,一言一行极为得体。
在得知他又有新书发布,我一点也不惊讶。我一直相信优秀是一种习惯,我们在得心研习社也一直崇尚这样的信条—知行合一,日日不断,滴水石穿。相信如此优秀、坚持的人一定能交付优秀的作品。
身处信息化时代,学会一门编程语言对每一个人来说都是必要的。Python作为一门易入门的语言,在科学计算、云计算和人工智能领域应用广泛,更值得大家去学习。
宇宙之前已经出版过多本Python类的书籍,而这本书更是深入学习Python的优秀作品。在本书中,宇宙结合自己工作所学,从更深层次对Python的使用进行讲解,相信读者阅读本书后能有不少收获。
期待更多人通过这本书认识宇宙,和宇宙一起探索优雅的Python世界。
—陈桂新 金雕生活创始人、前盛大游戏技术委员会主席



推荐序二 Foreword 2
在“互联网+”时代,不管是运维人员、研发人员,还是测试人员,都在寻求一种简单、通用的语言来助力自己快速成长。Python正好是满足这种需求的较好选择,是智能化编程的首选。
本书作者刘宇宙是一位资深的Python研发工程师,之前陆续出版过“Python 3.X从零开始学”系列、《Python实战之数据库应用和数据获取》 ?《Python 实用教程》 ?《Python实战之数据分析与处理》,在Python编程方面有自己独到的见解。
本书涵盖Python源码剖析,数字、字符串、数据等对象的进阶探索以及大量实例等,相信能帮助你在Python编程方面更进一步,以较高的水平胜任各类企业的编程岗位,提升职场竞争力。
——杨晨 快手游戏运维总监、前腾讯游戏运维专家

图书目录

推荐语
推荐序一
推荐序二
前言
第0章 Python总览 1
0.1 Python总体架构 1
0.2 Python源码组织 2
0.3 Python对象初探 3
0.3.1 Python内的对象 3
0.3.2 对象的分类 4
0.3.3 对象机制的基石—PyObject 5
0.3.4 定长对象和变长对象 5
0.3.5 类型对象 6
0.3.6 类型的类型 7
0.3.7 对象的创建 8
0.3.8 对象的行为 8
0.3.9 对象的多态性 9
0.3.10 引用计数 10
0.4 本章小结 11
第1章 数字对象 12
1.1 整数对象 12
1.1.1 PyLongObject对象 12
1.1.2 小整数对象 14
1.1.3 大整数对象 14
1.2 数字格式化输出 14
1.3 进制转换 16
1.4 数字运算 17
1.4.1 四舍五入运算 17
1.4.2 浮点数运算 19
1.4.3 复数运算 20
1.4.4 分数运算 22
1.4.5 大型数组运算 22
1.4.6 矩阵与线性代数运算 25
1.5 字节到大整数的打包与解包 27
1.6 无穷大与NaN 28
1.7 随机数 30
1.8 本章小结 32
第2章 字符串 33
2.1 字符串对象解析 33
2.1.1 字符串对象的intern机制 33
2.1.2 字符串操作效率 34
2.2 字符串操作 35
2.2.1 字符串分割 35
2.2.2 删除不需要的字符 36
2.2.3 字符串清理 37
2.2.4 字符串对齐 39
2.2.5 字符串拼接 40
2.2.6 字符串插入 42
2.2.7 字符串格式化 43
2.2.8 处理HTML和XML文本 43
2.3 字符串匹配 44
2.3.1 字符串开头或结尾匹配 44
2.3.2 用Shell通配符匹配字符串 46
2.3.3 字符串匹配和搜索 47
2.3.4 最短匹配 49
2.3.5 多行匹配 50
2.4 字符串搜索 50
2.4.1 字符串搜索替换 50
2.4.2 字符串忽略大小写的搜索替换 51
2.5 将Unicode文本标准化 52
2.6 在正则表达式中使用Unicode字符 54
2.7 令牌解析 55
2.8 简单的递归下降分析器实现 57
2.9 字节字符串操作 64
2.10 本章小结 66
第3章 数据结构 67
3.1 序列 67
3.1.1 序列对象解析 67
3.1.2 序列解压 68
3.1.3 序列去重并保持顺序 70
3.1.4 序列元素统计 71
3.1.5 过滤序列元素 72
3.1.6 序列元素名称映射 74
3.1.7 转换并计算数据 76
3.2 字典 77
3.2.1 字典对象解析 77
3.2.2 字典映射 79
3.2.3 字典排序 81
3.2.4 字典运算 81
3.2.5 字典查找 83
3.2.6 通过关键字排序字典 84
3.2.7 字典提取 85
3.2.8 字典合并 86
3.3 可迭代对象操作 88
3.3.1 可迭代对象解压 88
3.3.2 保留最后N个元素 89
3.3.3 记录分组 90
3.4 查找最大或最小的N个元素 91
3.5 实现一个优先级队列 92
3.6 命名切片 95
3.7 排序不支持原生比较的对象 96
3.8 本章小结 97
第4章 迭代器与生成器 98
4.1 迭代操作 98
4.1.1 手动遍历迭代器 98
4.1.2 代理迭代 99
4.1.3 实现迭代协议 100
4.1.4 反向迭代 102
4.1.5 迭代器切片 104
4.1.6 跳过可迭代对象的开始部分 104
4.1.7 排列组合的迭代 106
4.1.8 序列上索引值迭代 107
4.1.9 多个序列迭代 109
4.1.10 集合元素的迭代 111
4.1.11 顺序迭代合并后的排序迭代对象 112
4.1.12 迭代器代替while无限循环 113
4.2 使用生成器创建新的迭代模式 113
4.3 带有外部状态的生成器函数 115
4.4 创建数据处理管道 116
4.5 展开嵌套的序列 118
4.6 本章小结 120
第5章 文件与I/O 121
5.1 读/写操作 121
5.1.1 读/写文本数据 121
5.1.2 读/写字节数据 123
5.1.3 读/写压缩文件 124
5.2 文件操作 126
5.2.1 文件的写入 126
5.2.2 操作文件路径名 126
5.2.3 文件检查 127
5.2.4 文件列表获取 128
5.2.5 忽略文件名编码 129
5.2.6 打印不合法的文件名 130
5.2.7 文件编码变更 132
5.2.8 在文本文件中写入字节 133
5.2.9 文件描述符包装 134
5.2.10 创建临时文件和文件夹 135
5.2.11 文件迭代 137
5.2.12 二进制文件映射 137
5.3 使用分隔符或行终止符打印 139
5.4 字符串的I/O操作 140
5.5 可变缓冲区中二进制数据的读取 141
5.6 串行端口的数据通信 143
5.7 对象序列化 143
5.8 本章小结 146
第6章 数据编码及处理 147
6.1 数据读/写 147
6.1.1 CSV数据读/写  147
6.1.2 JSON数据读/写 151
6.1.3 二进制数组数据读/写 155
6.1.4 嵌套和可变长二进制数据读取 158
6.2 XML数据解析 166
6.2.1 简单XML数据解析 166
6.2.2 解析XML文档 167
6.2.3 修改XML 169
6.3 字典转换为XML 170
6.4 与关系型数据库的交互 172
6.5 编码/解码 174
6.5.1 十六进制数编码和解码 174
6.5.2 编码/解码Base64数据 175
6.6 本章小结 176
第7章 函数 177
7.1 函数定义 177
7.1.1 有默认参数的函数定义 177
7.1.2 匿名或内联函数定义 180
7.2 函数的参数 181
7.2.1 接收任意数量参数 181
7.2.2 接收关键字参数 183
7.2.3 为参数增加元信息 184
7.2.4 减少参数个数 185
7.3 返回多个值的函数 187
7.4 变量处理 188
7.4.1 匿名函数捕获变量值 188
7.4.2 访问闭包中定义的变量 190
7.5 类转换为函数 192
7.6 回调函数 193
7.6.1 有额外状态信息的回调函数 193
7.6.2 内联回调函数 196
7.7 本章小结 198
第8章 类与对象 199
8.1 对象处理 199
8.1.1 对象显示 199
8.1.2 有效创建大量对象 200
8.1.3 由字符串调用对象 201
8.2 自定义格式化字符串 202
8.3 上下文管理协议 203
8.4 类的处理 205
8.4.1 封装属性名 205
8.4.2 调用父类方法 207
8.4.3 扩展property 213
8.4.4 创建新的类或实例属性 217
8.4.5 定义多个构造器 219
8.4.6 类中的比较操作 220
8.5 属性处理 222
8.5.1 可管理属性创建 222
8.5.2 延迟计算属性 226
8.5.3 属性的代理访问 229
8.6 数据结构的初始化 233
8.7 接口或者抽象基类定义 236
8.8 数据模型的类型约束 238
8.9 自定义容器 243
8.10 不调用init方法的实例创建 246
8.11 利用Mixin扩展类功能 247
8.12 状态对象实现 249
8.13 设计模式处理 252
8.13.1 访问者模式 252
8.13.2 不用递归实现访问者模式 255
8.14 数据结构的内存管理 259
8.15 创建缓存 262
8.16 本章小结 266
第9章 元编程 267
9.1 装饰器 267
9.1.1 函数添加装饰器 267
9.1.2 装饰器中保留函数元信息 269
9.1.3 解除装饰器 271
9.1.4 带参数的装饰器 272
9.1.5 装饰器自定义属性 273
9.1.6 带可选参数的装饰器 276
9.1.7 函数的类型检查 278
9.1.8 类中定义装饰器 281
9.1.9 装饰器定义为类 282
9.1.10 类和静态方法的装饰器 285
9.1.11 给函数增加参数 287
9.1.12 扩充类的功能 289
9.2 元类 291
9.2.1 控制实例创建 291
9.2.2 元类定义可选参数 293
9.3 类的属性定义顺序 295
9.4 强制参数签名 297
9.5 强制使用编程规约 300
9.6 以编程方式定义类 303
9.7 初始化类的成员 306
9.8 利用注解实现方法重载 307
9.9 避免重复的属性方法 313
9.10 定义上下文管理器 314
9.11 局部变量域中执行代码 316
9.12 Python源码解析 319
9.13 Python字节码拆解 322
9.14 本章小结 324
第10章 模块与包 325
10.1 模块处理 325
10.1.1 模块层级 325
10.1.2 控制模块的导入 326
10.1.3 重新加载模块 327
10.1.4 通过字符串名导入模块 328
10.1.5 远程加载模块 329
10.1.6 导入模块的同时修改模块 346
10.2 读取包中的数据文件 348
10.3 将文件夹加入sys.path 349
10.4 安装私有的包 350
10.5 创建新的Python环境 350
10.6 分发包 352
10.7 本章小结 353
第11章 网络编程 354
11.1 与HTTP服务交互 354
11.2 创建服务器 357
11.2.1 TCP服务器 357
11.2.2 UDP服务器 360
11.3 通过CIDR地址生成对应的IP地址集 361
11.4 REST接口创建 363
11.5 远程调用 367
11.5.1 远程方法调用 367
11.5.2 通过XML-RPC远程调用 371
11.6 不同Python解释器之间的交互 373
11.7 客户端认证 374
11.8 Socket文件描述符传递 376
11.9 事件驱动的I/O 380
11.10 大型数组发送与接收 385
11.11 本章小结 387
第12章 并发编程 388
12.1 线程处理 388
12.1.1 线程的启动与停止 388
12.1.2 线程判断 391
12.1.3 线程间通信 394
12.1.4 线程加锁 398
12.1.5 防止死锁 401
12.1.6 线程状态信息保存 404
12.1.7 创建线程池 405
12.2 并行编程 408
12.3 全局锁问题 412
12.4 Actor任务定义 414
12.5 消息发布/订阅模型 417
12.6 生成器代替线程 420
12.7 线程队列轮询 427
12.8 守护进程 429
12.9 本章小结 432
第13章 脚本编程与系统管理 433
13.1 脚本接收 433
13.2 终止程序 434
13.3 解析命令行选项 434
13.4 弹出密码输入提示 436
13.5 执行外部命令 437
13.6 文件操作 439
13.6.1 文件和目录的复制或移动 439
13.6.2 创建和解压归档文件 440
13.6.3 文件查找 441
13.6.4 配置文件读取 442
13.7 添加日志 444
13.7.1 脚本增加日志功能 444
13.7.2 函数库增加日志功能 446
13.8 实现计时器 447
13.9 内存和CPU监测 449
13.10 启动Web浏览器 450
13.11 本章小结 451
第14章 测试、调试和异常 452
14.1 测试 452
14.1.1 stdout输出 452
14.1.2 对象打补丁 453
14.1.3 测试异常 455
14.1.4 记录测试结果 457
14.1.5 性能测试 458
14.1.6 测试失败处理 460
14.2 异常处理 461
14.2.1 捕获所有异常 461
14.2.2 处理多个异常 462
14.2.3 自定义异常 464
14.2.4 抛出新的异常 466
14.2.5 异常重新抛出 468
14.2.6 警告信息 468
14.3 程序调试 470
14.4 加速程序运行 472
14.5 实战—自然语言处理 476
14.6 本章小结 502
第15章 Python的内存管理机制 503
15.1 Python内存架构 503
15.2 小块空间的内存池 505
15.2.1 block 505
15.2.2 pool 506
15.2.3 arena 506
15.2.4 内存池 507
15.3 循环引用的垃圾收集 509
15.3.1 引用计数与垃圾收集 509
15.3.2 三色标记模型 510
15.4 Python垃圾收集 511
15.4.1 可收集对象链表 511
15.4.2 分代垃圾收集 513
15.4.3 Python中的标记—清除方法 514
15.5 实战——内存监控 516
15.6 本章小结 520
第16章 性能优化与实践 521
16.1 优化的规则 521
16.1.1 先使程序可以正常工作 521
16.1.2 从用户的角度进行 522
16.1.3 保证代码易读 522
16.2 优化策略 523
16.2.1 寻找其他原因 523
16.2.2 度量硬件 523
16.2.3 编写速度测试代码 523
16.3 查找瓶颈 524
16.3.1 剖析CPU使用情况 524
16.3.2 剖析内存使用情况 528
16.4 降低复杂度 530
16.4.1 测量回路复杂度 530
16.4.2 测量大O记号 530
16.4.3 简化 531
16.5 实战——爬虫程序的性能优化 532
16.6 本章小结 537

教学资源推荐
作者: 皮德常 编著
作者: 罗晓芳 李慧 孙涛 孙大为 朱鸣华 杨微 编著
作者: Mario Hewardt Daniel Pravat
作者: 刘艺
参考读物推荐
作者: (美)Subrahmanyam Allamaraju 等著
作者: 郑慧 范忠诚
作者: [美]史蒂夫·霍夫曼(Steve Hoffman) 斯里纳特·佩雷拉(Srinath Perera)著