目录 第1章 初识Python 1 1.1 Python概述 1 1.1.1 Python起源 2 1.1.2 Python版本 2 1.1.3 Python应用 3 1.2 搭建Python开发环境 4 1.2.1 下载Python 4 1.2.2 安装Python 4 1.2.3 启动Python 6 1.2.4 多版本Python及虚拟环境的安装 7 1.3 Python开发环境的使用 10 1.3.1 使用自带的IDLE 11 1.3.2 常用的第三方开发工具 11 1.3.3 官网交互式环境 11 1.4 初学者常见的问题 12 1.4.1 为什么提示“python不是内部或外部命令……” 12 1.4.2 如何在Python交互模式下运行.py文件 13 1.5 本章实战 13 1.5.1 IDLE的简单使用 13 1.5.2 pip工具的使用 15 1.5.3 初始化环境 16 1.6 本章小结 16 1.7 思考与练习 16 第2章 Python语言基础 17 2.1 Python语法特点 17 2.1.1 注释 18 2.1.2 代码规范 20 2.2 标识符与保留字 22 2.2.1 标识符 22 2.2.2 保留字 23 2.3 使用变量 24 2.3.1 变量的定义 24 2.3.2 变量的类型 25 2.4 基本数据类型 25 2.4.1 数字类型 25 2.4.2 字符串类型 27 2.4.3 布尔类型 29 2.4.4 数据类型转换 29 2.5 运算符 30 2.5.1 算术运算符 30 2.5.2 比较运算符 32 2.5.3 赋值运算符 32 2.5.4 逻辑运算符 34 2.5.5 位运算符 34 2.5.6 成员运算符 35 2.5.7 身份运算符 36 2.5.8 运算符的优先级 36 2.6 基本输入输出 38 2.6.1 使用input()函数输入 38 2.6.2 使用print()函数输出 38 2.7 本章实战 39 2.7.1 求和 39 2.7.2 求平方根 40 2.7.3 求水仙花数 41 2.7.4 判断素数 42 2.8 本章小结 43 2.9 思考与练习 44 第3章 字符与序列 45 3.1 字符串的常见操作 46 3.1.1 字符串长度的计算 47 3.1.2 字母的大小写转换 47 3.1.3 字符串的分隔 48 3.1.4 字符串的拼接 49 3.1.5 字符串查找 52 3.1.6 字符串替换 52 3.1.7 统计字符出现的次数 53 3.1.8 去除字符串中的空格和特殊字符 53 3.1.9 格式化字符串 54 3.1.10 encode()和decode()方法 55 3.2 序列 56 3.2.1 索引 56 3.2.2 切片 57 3.2.3 序列相加 58 3.2.4 序列相乘 59 3.2.5 检查某个元素是否是序列的成员 59 3.2.6 计算序列的长度、最大值和最小值 60 3.3 列表序列 60 3.3.1 删除列表元素 61 3.3.2 访问列表元素 62 3.3.3 更新与扩展列表 62 3.3.4 对列表元素进行统计 63 3.3.5 对列表进行排序 64 3.3.6 列表推导式 65 3.4 元组 67 3.4.1 元组的创建 67 3.4.2 访问元组元素 69 3.4.3 连接元组 69 3.4.4 删除元组 69 3.4.5 元组的运算符 70 3.4.6 生成器 70 3.4.7 元组与列表的区别 71 3.5 字典 72 3.5.1 字典的创建 72 3.5.2 访问字典 72 3.5.3 修改字典 73 3.5.4 删除字典元素 73 3.5.5 字典的内置方法 73 3.5.6 字典的遍历 74 3.6 集合 75 3.6.1 集合的创建 75 3.6.2 集合的常见操作 76 3.6.3 集合的内置方法 78 3.7 本章实战 79 3.8 本章小结 80 3.9 思考与练习 81 第4章 流程控制语句 83 4.1 分支结构 83 4.1.1 单分支if结构 83 4.1.2 双分支if…else结构 84 4.1.3 多分支if…elif…else结构 84 4.2 循环结构 85 4.2.1 while循环 85 4.2.2 while死循环 86 4.2.3 while…else语句 86 4.2.4 for循环 87 4.2.5 循环控制语句 87 4.2.6 循环嵌套 88 4.3 本章实战 89 4.3.1 判断闰年 89 4.3.2 使用snaps库制作数字闹钟 90 4.4 本章小结 90 4.5 思考与练习 90 第5章 正则表达式 92 5.1 认识正则表达式 92 5.1.1 元字符 93 5.1.2 预定义字符 93 5.1.3 特殊分组用法 94 5.2 re模块中的常用功能函数 95 5.2.1 re.compile函数 95 5.2.2 re.match函数 95 5.2.3 re.search函数 96 5.2.4 re.findall函数 97 5.2.5 re.finditer函数 97 5.2.6 re.split函数 98 5.2.7 re.sub函数 98 5.2.8 re.subn函数 99 5.2.9 注意事项 99 5.3 本章实战 100 5.4 本章小结 102 5.5 思考与练习 102 第6章 函数 103 6.1 函数的创建和调用 103 6.1.1 创建函数 103 6.1.2 调用函数 104 6.2 参数传递 106 6.2.1 不可变类型参数和可变类型参数 106 6.2.2 参数形式 107 6.3 返回值 111 6.3.1 return语句 111 6.3.2 返回多个值 111 6.4 变量的作用域 112 6.4.1 全局变量和局部变量 113 6.4.2 global和nonlocal关键字 113 6.5 匿名函数(lambda) 114 6.6 Collatz序列 115 6.7 本章小结 116 6.8 思考与练习 116 第7章 面向对象编程 117 7.1 面向对象编程概述 117 7.1.1 面向对象编程中的术语介绍 118 7.1.2 类的定义 118 7.1.3 类的使用 119 7.1.4 类的方法 120 7.2 深入介绍类 120 7.2.1 类的构造方法 121 7.2.2 类的访问权限 124 7.3 封装 129 7.4 继承与多态 132 7.4.1 类的单继承 132 7.4.2 类的多继承 133 7.4.3 构造函数的继承 134 7.4.4 方法重写 135 7.4.5 继承下的多态 135 7.5 类的专有方法 138 7.6 本章实战 144 7.7 本章小结 145 7.8 思考与练习 146 第8章 模块 148 8.1 模块 148 8.1.1 标准模块 149 8.1.2 import语句 149 8.1.3 搜索路径 150 8.1.4 from…import语句 151 8.1.5 创建模块 152 8.1.6 安装第三方模块 152 8.2 模块的高级技术 153 8.2.1 __name__属性 153 8.2.2 dir函数 154 8.3 Python中的包 155 8.3.1 包的定义 155 8.3.2 包的导入 155 8.3.3 包的组织 156 8.4 常用的内置模块 156 8.4.1 collections 156 8.4.2 base64 159 8.4.3 struct 160 8.4.4 hashlib 161 8.4.5 itertools 163 8.4.6 XML 164 8.4.7 HTMLParser 166 8.5 本章实战 166 8.5.1 创建模块 166 8.5.2 安装模块 170 8.6 本章小结 171 8.7 思考与练习 171 第9章 异常处理和程序调试 172 9.1 异常 173 9.1.1 错误与异常的概念 173 9.1.2 Python内置异常 173 9.1.3 requests模块的相关异常 175 9.1.4 用户自定义异常 176 9.2 异常处理 176 9.2.1 捕获所有异常 177 9.2.2 捕获指定异常 177 9.2.3 捕获多个异常 178 9.2.4 异常中的else 178 9.2.5 异常中的finally 178 9.2.6 使用raise语句主动抛出异常 179 9.2.7 使用traceback模块查看异常 180 9.3 程序调试 181 9.3.1 调试 181 9.3.2 断言 182 9.3.3 logging 183 9.3.4 pdb 183 9.3.5 pdb.set_trace() 185 9.3.6 IDE 186 9.4 单元测试 186 9.4.1 单元测试概述 186 9.4.2 运行单元测试 188 9.4.3 setUp()与tearDown()方法 188 9.5 文档测试 189 9.6 本章小结 191 9.7 思考与练习 191 第10章 目录和文件操作 192 10.1 基本文件操作 192 10.1.1 打开和关闭文件 192 10.1.2 文件模式 194 10.1.3 缓冲 195 10.2 基本文件方法 196 10.2.1 读和写 196 10.2.2 重命名 200 10.2.3 序列化和反序列化 201 10.3 目录操作 206 10.3.1 路径 207 10.3.2 目录内容 209 10.3.3 获取文件信息 210 10.3.4 重命名、移动、复制和删除文件 211 10.3.5 创建和删除目录 211 10.3.6 文件通配符 212 10.4 轮换文件 213 10.5 本章小结 214 10.6 思考与练习 215 第11章 多线程编程 216 11.1 进程和线程 216 11.1.1 进程 216 11.1.2 线程 217 11.1.3 多进程和多线程 217 11.2 使用线程 218 11.2.1 全局解释器锁 218 11.2.2 退出线程 219 11.2.3 Python的线程模块 219 11.3 _thread模块 219 11.4 threading模块 222 11.4.1 守护线程 222 11.4.2 Thread对象 223 11.5 线程同步 227 11.6 Queue模块 229 11.7 线程与进程的比较 230 11.7.1 线程切换 231 11.7.2 计算密集型与IO密集型 231 11.7.3 异步IO 232 11.8 本章实战 232 11.8.1 斐波那契数列、阶乘和加和 232 11.8.2 使用队列解决生产者/消费者模型 234 11.8.3 子进程的使用 235 11.8.4 进程池的使用 236 11.8.5 多个子进程间的通信 237 11.9 本章小结 238 11.10 思考与练习 239 第12章 数据库编程 240 12.1 使用dbm创建持久字典 241 12.1.1 选择dbm模块 241 12.1.2 创建持久字典 241 12.1.3 访问持久字典 242 12.1.4 dbm与关系数据库的适用场合 244 12.2 关系数据库与SQL 244 12.2.1 SQL语言 245 12.2.2 创建数据库 247 12.2.3 定义表 248 12.3 使用Python的DB API 249 12.3.1 下载DB API模块 249 12.3.2 创建连接 249 12.3.3 数据库的CRUD操作 250 12.3.4 使用事务并提交结果 255 12.3.5 检查模块的功能和元数据 256 12.3.6 处理错误 256 12.4 使用mysql-connector 257 12.4.1 连接MySQL数据库 257 12.4.2 创建数据库 258 12.4.3 创建数据表 258 12.4.4 主键设置 259 12.4.5 插入数据 260 12.4.6 查询数据 261 12.4.7 where条件语句 262 12.4.8 排序 263 12.4.9 limit语句 264 12.4.10 删除记录 265 12.4.11 更新数据 265 12.4.12 删除数据表 266 12.5 本章小结 267 12.6 思考和练习 267 第13章 网络编程 270 13.1 网络编程概述 270 13.2 TCP/IP简介 271 13.2.1 TCP/IP协议族概述 271 13.2.2 应用层 271 13.2.3 传输层 274 13.2.4 网络层 275 13.2.5 IP地址与端口 276 13.3 发送电子邮件 277 13.3.1 使用Python发送邮件 277 13.3.2 使用Python发送HTML格式的邮件 279 13.3.3 使用Python发送带附件的邮件 280 13.3.4 在HTML文本中添加图片 281 13.3.5 使用第三方SMTP服务发送邮件 282 13.4 接收Internet邮件 283 13.4.1 通过POP3下载邮件 283 13.4.2 解析邮件 284 13.5 套接字编程 286 13.5.1 TCP编程 286 13.5.2 UDP编程 290 13.6 本章小结 291 13.7 思考和练习 291 第14章 Django与投票管理系统 292 14.1 Web框架的功能 293 14.1.1 Web框架的基本功能 293 14.1.2 Web框架的其他通用功能 293 14.2 Django框架的安装 294 14.2.1 Django框架的特点 294 14.2.2 Django框架的版本 294 14.2.3 在Windows下安装Django 295 14.3 使用Django框架 296 14.3.1 创建pyqi项目 296 14.3.2 创建投票应用polls 298 14.3.3 项目的目录结构 299 14.3.4 初步配置视图和urls 299 14.4 为pyqi项目创建数据库 301 14.4.1 为pyqi项目配置数据库 301 14.4.2 为polls应用创建模型 302 14.4.3 为polls应用激活模型 303 14.4.4 测试生成的模型API 305 14.4.5 使用Django管理界面 307 14.5 完善投票应用的视图 310 14.5.1 编写视图 311 14.5.2 为视图添加模板 312 14.5.3 渲染模板 313 14.5.4 抛出Http404异常 314 14.5.5 get_object_or_404() 314 14.5.6 为投票应用使用模板 315 14.5.7 为URL名称添加名称空间 315 14.6 为投票应用定制表单 316 14.6.1 编写表单 316 14.6.2 通用视图 318 14.7 管理投票应用的静态资源 320 14.7.1 自定义应用界面和风格 320 14.7.2 管理静态资源 320 14.8 完善投票管理后台 321 14.8.1 修改后台表单 321 14.8.2 修改字段列表 325 14.8.3 更改后台界面和风格 326 14.9 打包和发布投票系统 328 14.9.1 重用的重要性 328 14.9.2 打包项目和应用 328 14.9.3 安装和卸载自定义包 331 14.9.4 发布包 332 14.10 本章小结 332 14.11 思考与练习 332 参考文献 333