(1)美亚4.6星,Python软件基金会董事会主席内奥米·塞德(Naomi Ceder)作序推荐 (2)涵盖从新手入门到熟练编程的Python知识,包含基础语法和并发、线程等功能,让读者能够从零基础走向写出可公开发行级别的专业的Python程序 (3)凝结作者十余年的Python教学经验,内容系统、深入浅出,示例设计精巧、清晰易懂,能够让读者透彻理解Python的各项功能 (4)揭示Python的技术逻辑,讲解Python的惯用法,让读者掌握Python的思维方式,编写出Pythonic的Python代码 (5)使用代码示例来演示Python的各项功能,示例以日常生活为背景,风趣幽默,打破技术书沉闷无聊的刻板印象,让读者爱上Python编程
售 价:¥
纸质售价:¥93.40购买纸书
6.4
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐

版 权
版 权 声 明
内 容 提 要
推 荐 序
关 于 作 者
关于技术审校
致 谢
前 言
资源与支持
第一部分 Python环境
第1章 Python的哲学
1.1 到底什么是Python?
1.2 破除误解:Python不是什么
1.2.1 误解1:Python仅仅是一种脚本语言
1.2.2 误解2:Python很慢
1.2.3 误解3:Python不能被编译
1.2.4 误解4:Python在后台编译
1.2.5 误解5:Python不适合大型项目
1.3 Python 2 vs Python 3
1.4 定义“Pythonic”代码
1.5 Python之禅
1.6 文档、PEP和你
1.7 社区中谁说了算?
1.8 Python社区
1.9 对“明显的方式”的追求
1.10 本章小结
第2章 Python开发环境
2.1 安装Python
2.1.1 在Windows系统中安装Python
2.1.2 在macOS系统中安装Python
2.1.3 在Linux系统中安装Python
2.1.4 通过源代码构建Python
2.2 认识Python解释器
2.2.1 交互式会话
2.2.2 运行Python文件
2.3 包和虚拟环境
2.3.1 创建一个虚拟环境
2.3.2 激活虚拟环境
2.3.3 退出虚拟环境
2.4 pip介绍
2.4.1 系统范围的包
2.4.2 安装包
2.4.3 requirements.txt
2.4.4 更新包
2.4.5 卸载包
2.4.6 搜索包
2.4.7 一个关于pip的警告
2.5 虚拟环境和Git
2.5.1 shebang
2.5.2 文件编码
2.6 一些额外的关于虚拟环境的小贴士
2.6.1 在不激活虚拟环境的情况下使用虚拟环境
2.6.2 一些替代品
2.7 认识PEP 8
2.7.1 行宽限制的历史债务
2.7.2 制表符还是空格
2.8 代码质量控制:静态分析工具
2.8.1 Pylint
2.8.2 Flake8
2.8.3 Mypy
2.9 代码风格守护者:自动格式化工具
2.9.1 autopep8
2.9.2 Black
2.10 测试框架
2.11 代码编辑器一览
2.11.1 IDLE
2.11.2 Emacs和Vim
2.11.3 PyCharm
2.11.4 Visual Studio Code
2.11.5 Sublime Text
2.11.6 Spyder
2.11.7 Eclipse配合PyDev/LiClipse
2.11.8 Eric Python IDE
2.12 本章小结
第3章 语法速成课程
3.1 “Hello, world!”程序
3.2 语句和表达式
3.3 空格的重要性
3.4 空语句
3.5 注释以及文档字符串
3.6 声明变量
3.7 数学操作
3.7.1 初识数字类型
3.7.2 运算符
3.7.3 math模块
3.8 逻辑操作
3.8.1 条件语句
3.8.2 比较运算符
3.8.3 Boolean、None和身份运算符
3.8.4 真实性
3.8.5 逻辑运算符
3.8.6 海象运算符
3.8.7 省略符
3.9 字符串
3.9.1 字符串字面量
3.9.2 原始字符串
3.9.3 格式化字符串
3.9.4 模板字符串
3.9.5 字符串转换
3.9.6 字符串拼接的注意事项
3.10 函数
3.11 类和对象
3.12 异常处理
3.13 元组和列表
3.14 循环
3.14.1 while循环
3.14.2 循环控制
3.14.3 for循环
3.15 结构模式匹配
3.15.1 文本模式和通配符
3.15.2 or模式
3.15.3 捕获模式
3.15.4 门卫语句
3.15.5 更多关于结构模式匹配的信息
3.16 本章小结
第4章 项目结构和代码导入
4.1 设置代码仓库
4.2 模块和包
4.2.1 PEP 8和命名
4.2.2 项目的目录结构
4.3 import是如何工作的
4.4 导入操作的注意事项
4.4.1 从模块中导入函数
4.4.2 覆盖问题
4.4.3 包嵌套问题
4.4.4 谨防导入所有
4.5 在项目中使用import
4.5.1 绝对导入
4.5.2 相对导入
4.5.3 从同一个包中导入
4.6 入口点
4.6.1 模块入口点
4.6.2 包入口点
4.6.3 控制包的导入
4.6.4 程序入口点
4.7 Python模块搜索路径
4.8 导入模块时底层发生了什么?
4.9 本章小结
第二部分 基 本 结 构
第5章 变量和数据类型
5.1 Python中的变量:名称和值
5.2 赋值
5.3 数据类型
5.3.1 type()函数
5.3.2 鸭子类型
5.4 作用域和垃圾回收
5.4.1 局部作用域以及引用计数垃圾回收器
5.4.2 解释器关闭
5.4.3 全局作用域
5.4.4 全局作用域的注意事项
5.4.5 nonlocal关键字
5.4.6 作用域解析
5.4.7 关于类的一些特殊情况
5.4.8 分代垃圾回收器
5.5 不可变的真相
5.6 赋值传递
5.7 集合和引用
5.7.1 浅拷贝
5.7.2 深拷贝
5.8 隐式类型转换和显式类型转换
5.9 关于匈牙利命名法的注意事项
5.10 术语回顾
5.11 本章小结
第6章 函数和匿名函数
6.1 Python函数基础
6.2 递归
6.3 默认参数值
6.4 关键字参数
6.5 重载函数
6.6 可变参数
6.7 仅关键字参数
6.7.1 仅位置参数
6.7.2 参数类型:都在这儿了!
6.8 嵌套函数
6.9 闭包
6.9.1 带闭包的递归
6.9.2 有状态闭包
6.10 lambda表达式
6.10.1 为什么lambda表达式很有用?
6.10.2 将lambda表达式作为排序键
6.11 装饰器
6.12 类型提示及函数注解
6.12.1 鸭子类型和类型提示
6.12.2 应该使用类型提示吗?
6.13 本章小结
第7章 类 和 对 象
7.1 声明一个类
7.1.1 初始化器
7.1.2 构造器
7.1.3 终结器
7.2 属性
7.2.1 实例属性
7.2.2 类属性
7.3 作用域命名约定
7.3.1 非公共属性
7.3.2 公共属性
7.3.3 名称修饰
7.3.4 公共属性、非公共属性,还是名称修饰?
7.4 方法
7.4.1 实例方法
7.4.2 类方法
7.4.3 静态方法
7.5 特性
7.5.1 设置场景
7.5.2 定义一个特性
7.5.3 使用装饰器创建特性
7.5.4 什么时候不使用特性?
7.6 特殊方法
7.6.1 场景设置
7.6.2 转换方法
7.6.3 比较方法
7.6.4 二元运算符支持
7.6.5 一元运算符支持
7.6.6 让类可调用
7.6.7 更多特殊方法
7.7 类装饰器
7.8 对象的结构模式匹配
7.9 函数式编程和面向对象编程
7.10 什么时候使用类?
7.10.1 类不是模块
7.10.2 单一职责
7.10.3 共享状态
7.10.4 对象是否适合你?
7.11 本章小结
第8章 错误和异常
8.1 Python中的异常
8.2 阅读异常信息
8.3 捕获异常:LBYL和EAFP
8.4 多异常处理
8.5 当心“尿布反模式”
8.6 抛出异常
8.7 使用异常
8.7.1 异常和日志
8.7.2 冒泡
8.7.3 异常链
8.8 else和finally
8.8.1 else:如果所有功能正常运行
8.8.2 finally:在所有语句之后
8.9 创建异常
8.10 异常一览
8.11 本章小结
第三部分 数据和流程
第9章 集合与迭代
9.1 循环
9.1.1 while循环
9.1.2 for循环
9.2 集合
9.2.1 元组
9.2.2 具名元组
9.2.3 列表
9.2.4 双端队列
9.2.5 可变集合
9.2.6 不可变集合
9.2.7 字典
9.2.8 检查还是例外?
9.2.9 字典变体
9.3 集合的解包
9.3.1 星号表达式
9.3.2 字典的解包
9.4 集合的结构模式匹配
9.5 以索引或键访问元素
9.6 切片符
9.6.1 开始和停止
9.6.2 负索引
9.6.3 步长
9.6.4 切片复制
9.6.5 切片对象
9.6.6 对自定义对象切片
9.6.7 使用islice()
9.7 in运算符
9.8 检验集合的长度
9.9 迭代
9.9.1 可迭代对象和迭代器
9.9.2 手动使用迭代器
9.9.3 用for循环进行迭代
9.9.4 在循环中对集合进行排序
9.9.5 枚举循环
9.9.6 循环中的突变
9.9.7 嵌套循环和替代方案
9.10 迭代工具
9.10.1 基础内建工具
9.10.2 filter
9.10.3 map
9.10.4 zip
9.10.5 itertools
9.11 自定义可迭代类
9.12 本章小结
第10章 生成器和推导式
10.1 惰性求值和贪婪迭代
10.2 无限迭代器
10.3 生成器
10.3.1 生成器vs迭代器类
10.3.2 生成器关闭
10.3.3 行为关闭
10.3.4 异常抛出
10.4 yield from
10.5 生成器表达式
10.5.1 生成器对象都是惰性的
10.5.2 生成器表达式具有复合循环
10.5.3 生成器表达式中的条件
10.5.4 嵌套生成器表达式
10.6 列表推导式
10.7 集合推导式
10.8 字典推导式
10.9 生成器表达式的隐患
10.9.1 它们很快就会变得不可读
10.9.2 它们无法替代循环
10.9.3 它们很难调试
10.9.4 何时用生成器表达式
10.10 简单协程
10.10.1 从协程返回值
10.10.2 行为序列
10.11 异步又如何?
10.12 本章小结
第11章 文本输入/输出和上下文管理
11.1 标准输入和输出
11.1.1 重温print()
11.1.2 重温input()
11.2 流
11.3 上下文管理器基础
11.4 文件模式
11.5 读取文件
11.5.1 read()方法
11.5.2 readline()方法
11.5.3 readlines()方法
11.5.4 迭代读取
11.6 流位置
11.7 写入文件
11.7.1 write()方法
11.7.2 writelines()方法
11.7.3 用print()写文件
11.7.4 行分隔符
11.8 上下文管理器的细节
11.8.1 上下文管理器如何工作?
11.8.2 使用多个上下文管理器
11.8.3 实现上下文管理协议
11.8.4 __enter__()方法
11.8.5 __exit__()方法
11.8.6 使用自定义类
11.9 路径
11.9.1 路径对象
11.9.2 路径组成
11.9.3 创建路径
11.9.4 相对路径
11.9.5 相对包路径
11.9.6 路径操作
11.9.7 异地文件写入
11.9.8 os模块
11.10 文件格式
11.10.1 JSON
11.10.2 其他格式
11.11 本章小结
第12章 二进制和序列化
12.1 二进制表示和位运算
12.1.1 数字系统
12.1.2 Python整数和二进制
12.1.3 位运算
12.2 字节字面量
12.3 类字节对象
12.3.1 创建字节对象
12.3.2 使用int.to_bytes()
12.3.3 序列操作
12.3.4 将字节对象转换为整数
12.4 struct模块
12.4.1 struct格式字符串和打包
12.4.2 用struct解包
12.4.3 struct对象
12.5 类字节对象的位运算
12.5.1 通过整数进行位运算
12.5.2 通过迭代进行位运算
12.6 memoryview
12.7 读写二进制文件
12.7.1 数据组织
12.7.2 文件写入
12.7.3 从二进制文件读取
12.7.4 从二进制流中查找
12.7.5 BufferedRWPair
12.8 序列化技术
12.8.1 禁忌工具:pickle、marshal和shelve
12.8.2 序列化格式
12.9 本章小结
第四部分 高 级 概 念
第13章 继承和混入
13.1 何时使用继承?
13.2 Python的基础继承
13.3 多继承
13.3.1 方法解析顺序
13.3.2 确保方法解析顺序一致
13.3.3 显式地指定解析顺序
13.3.4 解析多继承中的基类
13.4 混入
13.5 本章小结
第14章 元类和抽象基类
14.1 元类
14.1.1 用类型创建类
14.1.2 自定义元类
14.2 用鸭子类型进行类型推导
14.2.1 EAFP:捕获异常
14.2.2 LBYL:检查属性
14.3 抽象基类
14.3.1 内置抽象基类
14.3.2 从抽象基类派生
14.3.3 实现自定义抽象基类
14.4 虚拟子类
14.4.1 设置示例
14.4.2 使用虚拟子类
14.5 本章小结
第15章 自省和泛型
15.1 特殊属性
15.2 内部对象属性访问:__dict__特殊属性
15.2.1 列出属性
15.2.2 获取属性
15.2.3 检查属性
15.2.4 设置属性
15.2.5 删除属性
15.3 函数属性
15.3.1 函数属性的错误使用方式
15.3.2 可变性和函数属性
15.4 描述符
15.4.1 描述符协议
15.4.2 编写描述符类(有点问题的方式)
15.4.3 使用描述符
15.4.4 以正确方式编写描述符类
15.4.5 在同一个类中使用多个描述符
15.5 slots
15.5.1 将属性名绑定到值
15.5.2 通过slots使用任意属性
15.5.3 slots和继承
15.6 不可变类
15.7 单分派泛型函数
15.7.1 用类型提示注册单分派泛型函数
15.7.2 用显式类型注册单分派泛型函数
15.7.3 用register()方法注册单分派泛型函数
15.8 使用元素类
15.9 任意执行
15.10 本章小结
第16章 异步和并发
16.1 Python中的异步
16.2 示例场景:Collatz游戏同步版本
16.3 异步
16.3.1 原生协程
16.3.2 任务
16.3.3 事件循环
16.3.4 令其(实际上)异步
16.4 调度和异步执行流程
16.5 异步迭代
16.6 异步上下文管理器
16.7 异步生成器
16.8 其他异步概念
16.9 本章小结
第17章 线程和并行
17.1 线程
17.1.1 并发vs并行
17.1.2 基本线程
17.1.3 超时
17.1.4 守护线程
17.1.5 futures和执行器
17.1.6 futures的超时
17.2 条件竞争
17.2.1 条件竞争示例
17.2.2 用ThreadPoolExecutor创建多线程
17.3 锁
17.4 死锁、活锁和饥锁
17.5 用队列传递消息
17.6 多工作线程的future
17.7 多进程实现并行
17.7.1 序列化数据
17.7.2 加速注意事项和ProcessPoolExecutor
17.8 生产者/消费者问题
17.8.1 导入模块
17.8.2 监视队列
17.8.3 子进程清理
17.8.4 消费者
17.8.5 检查空队列
17.8.6 生产者
17.8.7 启动进程
17.8.8 性能结果
17.8.9 多进程日志
17.9 本章小结
第五部分 超 越 代 码
第18章 打包和分发
18.1 规划打包
18.1.1 货物崇拜式编程的危险
18.1.2 关于打包的观点
18.1.3 确定打包目标
18.2 项目结构:src或src-less
18.3 用setuptools打包和分发
18.3.1 项目文件和结构
18.3.2 元数据归属
18.3.3 README.md和LICENSE文档
18.3.4 setup.cfg文件
18.3.5 setup.py文件
18.3.6 MANIFEST.in文件
18.3.7 requirements.txt文件
18.3.8 pyproject.toml文件
18.3.9 测试配置的设置
18.4 构建你的包
18.5 发布到pip
18.5.1 上传到TestPyPI
18.5.2 安装你上传的包
18.5.3 上传到PyPI
18.6 其他打包工具
18.6.1 Poetry
18.6.2 Flit
18.7 分发给最终用户
18.7.1 PEX
18.7.2 冻结器
18.7.3 镜像和容器
18.7.4 原生Linux包注意事项
18.8 文档
18.9 本章小结
第19章 调试和日志
19.1 警告
19.1.1 警告的类型
19.1.2 过滤警告
19.1.3 将警告转换为异常
19.2 日志记录
19.2.1 Logger对象
19.2.2 Handler对象
19.2.3 日志记录级别
19.2.4 控制日志级别
19.2.5 运行示例程序
19.2.6 过滤器、格式化程序和配置文件
19.3 断言语句
19.3.1 正确使用断言
19.3.2 错误使用断言
19.3.3 实战中的断言
19.4 inspect模块
19.5 使用pdb
19.5.1 调试案例
19.5.2 启动调试器
19.5.3 调试器shell指令
19.5.4 单步穿行代码
19.5.5 设置断点并单步执行函数
19.5.6 遍历执行栈
19.5.7 探查源代码
19.5.8 检验解决方案
19.5.9 事后调试
19.6 使用faulthandler
19.7 用Bandit评估程序安全性
19.8 向Python开发团队汇报问题
19.9 本章小结
第20章 测试和剖析
20.1 什么是TDD?
20.2 测试框架
20.3 示例项目
20.4 测试和项目结构
20.5 基础测试
20.5.1 启动示例
20.5.2 单元测试
20.5.3 用pytest执行测试
20.5.4 测试异常
20.6 测试夹具
20.6.1 继续之前的示例:使用API
20.6.2 在测试模块间共享数据
20.7 不稳定测试和有条件忽略测试
20.8 高级夹具:模拟和参数化
20.8.1 继续之前的示例:表达拼写错误
20.8.2 参数化
20.8.3 间接参数化夹具
20.8.4 动态替换模拟输入
20.8.5 标记
20.8.6 从标准流中捕获
20.8.7 GUI测试
20.8.8 继续之前的示例:将API连接到Typo
20.8.9 自动夹具
20.8.10 混合参数化
20.8.11 模糊测试
20.8.12 完成示例
20.9 代码覆盖率
20.10 用tox进行自动化测试
20.11 基准测试和性能分析
20.11.1 用timeit进行基准测试
20.11.2 用cProfile或profile进行性能分析
20.11.3 tracemalloc
20.12 本章小结
第21章 前 路 迢 迢
21.1 关于未来
21.2 你想出发去哪儿?
21.2.1 Python应用程序开发
21.2.2 Python游戏开发
21.2.3 Python Web开发
21.2.4 客户端Python
21.2.5 Python数据科学
21.2.6 Python机器学习
21.2.7 安全
21.2.8 Python嵌入式开发
21.2.9 脚本
21.3 Python特色
21.4 开发Python本身
21.4.1 开发Python包和工具
21.4.2 开发Python扩展
21.4.3 为Python做各种贡献
21.5 和Python共同成长
21.5.1 提出问题
21.5.2 回答问题
21.5.3 用户组
21.5.4 PyLadies
21.5.5 参加各种会议
21.5.6 加入Python软件基金会
21.6 在这条路上一直走下去
附录A 特殊方法和特殊属性
A.1 特殊方法
A.2 特殊属性
附录B pdb指令
附录C Guido van Rossum的国王节演讲
译 者 后 记
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜