主编推荐语
Python是一门动态编程语言,它简单而又强大,适用于众多领域。尽管编写Python代码比较容易,但是编写高效且易于维护和复用的代码是一个挑战。
内容简介
Python作为一种高-级程序设计语言,凭借其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言之一。 本书基于Python 3.5版本进行讲解,通过13章的内容,深度揭示了Python编程的高-级技巧。本书从Python语言及其社区的现状开始介绍,对Python语法、命名规则、Python包的编写、部署代码、扩展程序开发、管理代码、文档编写、测试开发、代码优化、并发编程、设计模式等重要话题进行了全面系统化的讲解。 本书适合想要进一步提高自身Python编程技能的读者阅读,也适合对Python编程感兴趣的读者参考学习。全书结合典型且实用的开发案例,可以帮助读者创建高性能的、可靠且可维护的Python应用。 Python作为一种高-级程序设计语言,凭借其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言之一。
本书基于Python 3.5版本进行讲解,通过13章的内容,深度揭示了Python编程的高-级技巧。本书从Python语言及其社区的现状开始介绍,对Python语法、命名规则、Python包的编写、部署代码、扩展程序开发、管理代码、文档编写、测试开发、代码优化、并发编程、设计模式等重要话题进行了全面系统化的讲解。
本书适合想要进一步提高自身Python编程技能的读者阅读,也适合对Python编程感兴趣的读者参考学习。全书结合典型且实用的开发案例,可以帮助读者创建高性能的、可靠且可维护的Python应用。
目录
- 版权信息
- 内容提要
- 译者简介
- 作者简介
- 审稿人简介
- 前言
- 第1章 Python现状
- 1.1 Python的现状与未来
- 1.2 Python升级及其原因
- 1.3 追踪Python最新变化——PEP文档
- 1.4 当前Python 3的普及程度
- 1.5 Python 3和Python 2的主要差异
- 1.5.1 为什么要关注这些差异
- 1.5.2 主要的语法差异和常见陷阱
- 1.5.3 用于保持跨版本兼容性的常用工具和技术
- 1.6 不只是CPython
- 1.6.1 为什么要关注Python实现
- 1.6.2 Stackless Python
- 1.6.3 Jython
- 1.6.4 IronPython
- 1.6.5 PyPy
- 1.7 Python开发的现代方法
- 1.8 应用层Python环境隔离
- 1.8.1 为什么要隔离
- 1.8.2 常用解决方案
- 1.8.3 选择哪种工具
- 1.9 系统级环境隔离
- 1.9.1 使用Vagrant的虚拟开发环境
- 1.9.2 容器化与虚拟化的对比
- 1.10 常用的生产力工具
- 1.10.1 自定义Python shell——IPython、bpython、ptpython等
- 1.10.2 交互式调试器
- 1.11 有用的资源
- 1.12 小结
- 第2章 语法最佳实践——类级别以下
- 2.1 Python的内置类型
- 2.1.1 字符串与字节
- 2.1.2 集合类型
- 2.2 高级语法
- 2.2.1 迭代器
- 2.2.2 yield语句
- 2.2.3 装饰器
- 2.2.4 上下文管理器——with语句
- 2.3 你可能还不知道的其他语法元素
- 2.3.1 for ... else ...语句
- 2.3.2 函数注解
- 2.4 小结
- 第3章 语法最佳实践——类级别以上
- 3.1 子类化内置类型
- 3.2 访问超类中的方法
- 3.2.1 Python 2中的旧式类与super
- 3.2.2 理解Python的方法解析顺序
- 3.2.3 使用super易犯的错误
- 3.2.4 最佳实践
- 3.3 高级属性访问模式
- 3.3.1 描述符
- 3.3.2 property
- 3.3.3 槽
- 3.4 元编程
- 3.4.1 装饰器—— 一种元编程方法
- 3.4.2 类装饰器
- 3.4.3 使用__new__()方法覆写实例创建过程
- 3.4.4 元类
- 3.4.5 一些关于代码生成的提示
- 3.5 小结
- 第4章 选择好的名称
- 4.1 PEP 8与命名最佳实践
- 4.1.1 为何要遵守PEP 8以及何时遵守PEP 8
- 4.1.2 超越PEP 8——团队的风格指南
- 4.2 命名风格
- 变量
- 4.3 命名指南
- 4.3.1 用“has”或“is”前缀命名布尔元素
- 4.3.2 用复数形式命名集合变量
- 4.3.3 用显式名称命名字典
- 4.3.4 避免通用名称
- 4.3.5 避免现有名称
- 4.4 参数的最佳实践
- 4.4.1 通过迭代设计构建参数
- 4.4.2 信任参数和测试
- 4.4.3 小心使用*args和**kwargs魔法参数
- 4.5 类的名称
- 4.6 模块和包的名称
- 4.7 有用的工具
- 4.7.1 Pylint
- 4.7.2 pep8和flake8
- 4.8 小结
- 第5章 编写一个包
- 5.1 创建一个包
- 5.1.1 Python打包工具的混乱状态
- 5.1.2 项目配置
- 5.1.3 自定义setup命令
- 5.1.4 在开发期间使用包
- 5.2 命名空间包
- 5.2.1 为什么有用
- 5.2.2 PEP 420——隐式命名空间包
- 5.2.3 以前Python版本中的命名空间包
- 5.3 上传一个包
- 5.3.1 PyPI——Python包索引
- 5.3.2 源代码包与构建包
- 5.4 独立可执行文件
- 5.4.1 独立可执行文件何时有用
- 5.4.2 常用工具
- 5.4.3 可执行包中Python代码的安全性
- 5.5 小结
- 第6章 部署代码
- 6.1 十二要素应用
- 6.2 用Fabric进行自动化部署
- 6.3 你自己的包索引或索引镜像
- 6.3.1 PyPI镜像
- 6.3.2 使用包进行部署
- 6.4 常见约定与实践
- 6.4.1 文件系统层次结构
- 6.4.2 隔离
- 6.4.3 使用进程管理工具
- 6.4.4 应该在用户空间运行应用代码
- 6.4.5 使用HTTP反向代理
- 6.4.6 优雅地重新加载进程
- 6.5 代码检测与监控
- 6.5.1 记录错误——sentry/raven
- 6.5.2 监控系统与应用指标
- 6.5.3 处理应用日志
- 6.6 小结
- 第7章 使用其他语言开发Python扩展
- 7.1 使用C或者C++编写扩展
- C或者C++扩展的工作原理
- 7.2 为什么你想用扩展
- 7.2.1 提高关键代码段的性能
- 7.2.2 集成现有的使用不同语言编写的代码
- 7.2.3 集成第三方动态库
- 7.2.4 创建自定义数据类型
- 7.3 编写扩展
- 7.3.1 纯C扩展
- 7.3.2 Cython
- 7.4 挑战
- 7.4.1 额外的复杂性
- 7.4.2 调试
- 7.5 无扩展的动态库接口
- 7.5.1 ctypes
- 7.5.2 CFFI
- 7.6 小结
- 第8章 管理代码
- 8.1 版本控制系统
- 8.1.1 集中式系统
- 8.1.2 分布式系统
- 8.1.3 集中式还是分布式
- 8.1.4 尽可能使用Git
- 8.1.5 Git工作流程与GitHub工作流程
- 8.2 持续的开发过程
- 8.2.1 持续集成
- 8.2.2 持续交付
- 8.2.3 持续部署
- 8.2.4 常用的持续集成工具
- 8.2.5 选择正确的工具和常见的陷阱
- 8.3 小结
- 第9章 文档化你的项目
- 9.1 7项技术写作规则
- 9.1.1 两步写作
- 9.1.2 定位读者
- 9.1.3 使用简单的风格
- 9.1.4 限制信息范围
- 9.1.5 使用现实中的代码示例
- 9.1.6 使用轻量且充分的方法
- 9.1.7 使用模板
- 9.2 reStructuredText入门
- 9.2.1 章节结构
- 9.2.2 列表
- 9.2.3 行内标记
- 9.2.4 文字块
- 9.2.5 链接
- 9.3 构建文档
- 构建文档集
- 9.4 构建自己的文档集
- 9.4.1 构建格局
- 9.4.2 文档构建与持续集成
- 9.5 小结
- 第10章 测试驱动开发
- 10.1 我不测试
- 10.1.1 测试开发的原则
- 10.1.2 什么样的测试
- 10.1.3 达式Python标准测试工具
- 10.2 我做测试
- 10.2.1 unittest陷阱
- 10.2.2 unittest的替代品
- 10.2.3 测试覆盖率
- 10.2.4 仿真与模拟
- 10.2.5 测试环境与依赖兼容性
- 10.2.6 文档驱动开发
- 10.3 小结
- 第11章 优化——一般原则与分析技术
- 11.1 3个优化规则
- 11.1.1 首先要能工作
- 11.1.2 从用户的角度考虑
- 11.1.3 保持代码的可读性和可维护性
- 11.2 优化策略
- 11.2.1 找到另外的罪魁祸首
- 11.2.2 扩展硬件
- 11.2.3 编写速度测试
- 11.3 查找瓶颈
- 11.3.1 分析CPU使用情况
- 11.3.2 分析内存使用
- 11.3.3 分析网络使用情况
- 11.4 小结
- 第12章 优化——一些强大的技术
- 12.1 降低复杂度
- 12.1.1 循环复杂度
- 12.1.2 大O记法
- 12.2 简化
- 在列表中搜索
- 12.3 使用集合模块
- 12.3.1 deque
- 12.3.2 defaultdict
- 12.3.3 namedtuple
- 12.4 架构体系的权衡
- 12.4.1 使用启发式和近似算法
- 12.4.2 使用任务队列和延迟处理
- 12.4.3 使用概率型数据结构
- 12.5 缓存
- 12.5.1 确定性缓存
- 12.5.2 非确定性缓存
- 12.5.3 缓存服务
- 12.6 小结
- 第13章 并发
- 13.1 为什么需要并发
- 13.2 多线程
- 13.2.1 什么是多线程
- 13.2.2 Python如何处理多线程
- 13.2.3 何时应该使用多线程
- 13.3 多进程
- 内置的multiprocessing模块
- 13.4 异步编程
- 13.4.1 协同多任务与异步I/O
- 13.4.2 Python中的async和await关键字
- 13.4.3 老Python版本中的asyncio
- 13.4.4 异步编程实例
- 13.4.5 使用futures将异步代码同步化
- 13.5 小结
- 第14章 有用的设计模式
- 14.1 创建型模式
- 单例
- 14.2 结构型模式
- 14.2.1 适配器
- 14.2.2 代理
- 14.2.3 外观
- 14.3 行为模式
- 14.3.1 观察者
- 14.3.2 访问者
- 14.3.3 模板
- 14.4 小结
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。