这是一本Python入门书,本书的特色之一是在介绍Python编程的基础知识之后,通过具体编程范例,分不同的主题来阐释如何用Python语言高效编程,在帮助读者夯实基础的同时找到最佳解决方案,达到学以致用的目的。
本书内容由浅入深,从理论到实践,首先介绍Python编程的基本知识和编程范例,然后介绍如何进行性能优化、有效调试以及如何控制程序的流程。此外,本书还讲解了Python中的加密服务和安全令牌等知识。通过学习本书,读者将对Python语言有一定的了解。本书能够帮助读者掌握如何编写程序、构建网站以及利用Python著名的数据科学库来处理数据等内容。本书涵盖各种类型的应用程序,可帮助读者根据所学的知识解决真实世界中的问题。
Python 编程入门的精炼指南,用python 3.7 进行数据科学和web开发;
提供本书源代码和书中彩图文件下载。
Python 是一种极其灵活和强大的编程语言,适用于多个领域。本书并没有对 Python 的基础知识进行过多讲解,而是对其实用性进行了透彻的介绍,从而帮助读者熟悉并使用该语言。
你将首先了解 Python 的基础知识,为接下来的学习打下坚实的基础,并学习Python 编程基础,即如何操控 Python以实现想要的效果。你还将探索不同的编程用法,找到解决特定问题的理想方法,理解如何实现程序性能优化,学习有效调试、控制程序的执行流,并使用一种交换格式对数据进行交换。此外,你还将学习 Python 的加密服务,理解安全标记的概念。
本书将帮助你透彻理解 Python 语言,学习如何编写程序、创建网站,并利用数据科学库对数据进行操作。本书还配备了一些实例,涵盖了各种不同的应用类型,并在全书最后引导你根据所学知识创建一个实际项目。
主要内容:
获取 Python,并在 Windows、macOS 和 Linux 上安装运行;
使用数据结构和控制流,探索编程的基本概念;编写优雅、可复用、高效的代码;
理解什么时候适合使用过程式编程,什么时候适合使用面向对象编程(OOP);
学习并发执行的基础知识;
通过编写测试,创建安全可靠的软件;
用 Django 创建简单的网站;
提取、清理和操纵数据。
法布里奇奥·罗马诺(Fabrizio Romano)出生于意大利,帕多瓦大学计算机科学系硕士。他是一位项目经理,同时也是一位教师,并且是CNHC的成员,现在就职于Sohonet,担任首席工程师和项目领导人。
第 1章 Python概述 1
1.1 编程预备知识 2
1.2 走近Python 4
1.3 Python的优点 5
1.3.1 可移植性 5
1.3.2 一致性 5
1.3.3 提高开发人员的效率 5
1.3.4 广泛的程序库 5
1.3.5 软件质量高 6
1.3.6 软件集成度高 6
1.3.7 满足感和乐趣 6
1.4 Python的缺点 6
1.5 当前的Python用户 7
1.6 设置环境 7
1.7 安装Python 8
1.7.1 安装Python解释器 9
1.7.2 关于virtualenv 10
1.7.3 第 一个虚拟环境 11
1.7.4 控制台 14
1.8 运行Python程序 14
1.8.1 运行Python脚本 14
1.8.2 在交互性shell中运行Python 15
1.8.3 以服务的形式运行Python 16
1.8.4 以GUI应用程序的形式运行Python 16
1.9 Python代码的组织方式 17
1.10 Python的执行模型 21
1.10.1 名称和名字空间 21
1.10.2 作用域 23
1.10.3 对象和类 26
1.11 编写良好代码的指导原则 28
1.12 Python的文化 29
1.13 关于IDE的说明 31
1.14 总结 31
第 2章 内置的数据类型 33
2.1 一切都是对象 34
2.2 可变对象与不可变对象 35
2.3 数值 36
2.3.1 整数 36
2.3.2 布尔值 38
2.3.3 实数 39
2.3.4 复数 40
2.3.5 分数和小数 40
2.4 不可变序列 42
2.4.1 字符串和字节 42
2.4.2 元组 45
2.5 可变序列 46
2.5.1 列表 47
2.5.2 字节数组 50
2.6 集合类型 51
2.7 映射类型—字典 53
2.8 collections模块 57
2.8.1 namedtuple 57
2.8.2 defaultdict 59
2.8.3 ChainMap 60
2.9 枚举 61
2.10 注意事项 62
2.10.1 小值缓存 62
2.10.2 如何选择数据结构 62
2.10.3 关于索引和截取 64
2.10.4 关于名称 65
2.11 总结 66
第3章 迭代和决策 67
3.1 条件编程 68
3.1.1 一种特化的else-elif 69
3.1.2 三元操作符 71
3.2 循环 72
3.2.1 for循环 72
3.2.2 迭代器和可迭代对象 74
3.2.3 对多个序列进行迭代 75
3.2.4 while循环 77
3.2.5 continue语句和break语句 80
3.2.6 一种特殊的else子句 82
3.3 综合应用 83
3.3.1 质数生成器 83
3.3.2 应用折扣 85
3.4 itertools模块 88
3.4.1 无限迭代器 89
3.4.2 终止于最短输入序列的迭代器 89
3.4.3 组合迭代器 90
3.5 总结 91
第4章 函数,代码的基本构件 92
4.1 函数的优点 93
4.1.1 减少代码的重复 94
4.1.2 分割复杂任务 94
4.1.3 隐藏实现细节 95
4.1.4 提高可读性 95
4.1.5 提高可追踪性 96
4.2 作用域和名称解析 97
4.3 输入参数 100
4.3.1 参数传递 100
4.3.2 对参数名称的赋值并不会影响调用者 101
4.3.3 修改可变对象会影响调用者 102
4.3.4 指定输入参数 103
4.4 返回值 111
4.5 一些实用的提示 113
4.6 递归函数 114
4.7 匿名函数 115
4.8 函数的属性 116
4.9 内置函数 117
4.10 最后一个例子 118
4.11 代码的文档 119
4.12 导入对象 120
4.13 总结 122
第5章 节省时间和内存 123
5.1 map、zip和filter函数 125
5.1.1 map函数 125
5.1.2 zip函数 128
5.1.3 filter函数 129
5.2 解析 129
5.2.1 嵌套的解析 131
5.2.2 在解析中应用过滤 131
5.2.3 dict解析 133
5.2.4 set解析 134
5.3 生成器 134
5.3.1 生成器函数 135
5.3.2 next工作方式 138
5.3.3 yield from表达式 141
5.3.4 生成器表达式 142
5.4 性能上的考虑 145
5.5 不要过度使用解析和生成器表达式 147
5.6 名称局部化 151
5.7 内置的生成行为 152
5.8 最后一个例子 153
5.9 总结 155
第6章 面向对象编程、装饰器和迭代器 156
6.1 装饰器 156
6.2 面向对象编程(OOP) 164
6.2.1 Python中最简单的类 164
6.2.2 类和对象的名字空间 165
6.2.3 属性屏蔽 166
6.2.4 self变量 167
6.2.5 实例的初始化 168
6.2.6 OOP与代码复用有关 169
6.2.7 访问基类 174
6.2.8 多重继承 176
6.2.9 静态方法和类方法 180
6.2.10 私有属性和名称改写 184
6.2.11 property装饰器 186
6.2.12 操作符重载 188
6.2.13 多态—简单说明 188
6.2.14 数据类 189
6.3 编写自定义的迭代器 190
6.4 总结 191
第7章 文件和数据持久化 192
7.1 操作文件和目录 193
7.1.1 打开文件 193
7.1.2 读取和写入文件 195
7.1.3 检查文件和目录是否存在 197
7.1.4 对文件和目录进行操作 197
7.1.5 临时文件和临时目录 200
7.1.6 检查目录的内容 201
7.1.7 文件和目录的压缩 202
7.2 数据交换格式 203
7.3 IO、流和请求 210
7.3.1 使用内存中的流 210
7.3.2 执行HTTP请求 211
7.4 对磁盘上的数据进行持久化 214
7.4.1 使用pickle模块对数据进行序列化 214
7.4.2 用shelve保存数据 216
7.4.3 把数据保存到数据库 217
7.5 总结 223
第8章 测试、性能分析和异常处理 224
8.1 对应用程序进行测试 225
8.1.1 测试的结构 227
8.1.2 编写测试的指导原则 228
8.1.3 单元测试 229
8.1.4 测试一个CSV生成器 231
8.2 测试驱动的开发 244
8.3 异常 247
8.4 对Python进行性能分析 251
8.5 总结 255
第9章 加密与标记 256
9.1 加密的需要 256
9.2 hashlib模块 257
9.3 secrets模块 260
9.3.1 随机数 260
9.3.2 标记的生成 260
9.3.3 摘要的比较 262
9.4 HMAC 263
9.5 JSON Web标记 263
9.5.1 已注册的诉求 265
9.5.2 使用非对称(公钥)算法 268
9.6 总结 270
第 10章 并发执行 271
10.1 并发与平行的比较 272
10.2 线程和进程 272
10.2.1 线程的简要剖析 272
10.2.2 全局解释器锁 274
10.2.3 竞争条件和死锁 275
10.2.4 进程的简要剖析 277
10.2.5 多线程与多进程之间的区别 278
10.3 Python中的并发执行 279
10.3.1 启动线程 279
10.3.2 启动进程 281
10.3.3 终止线程和进程 282
10.3.4 生成多个线程 283
10.3.5 解决竞争条件 284
10.3.6 线程的局部数据 286
10.3.7 线程和进程的通信 288
10.3.8 线程池和进程池 291
10.3.9 使用进程为函数添加到期时间 294
10.4 案例 295
10.4.1 案例1:并发的mergesort 296
10.4.2 案例2:批量解答数独的程序 300
10.4.3 案例3:下载随机图像 309
10.5 总结 314
第 11章 调试和故障排除 315
11.1 调试技巧 316
11.1.1 用print进行调试 316
11.1.2 用自定义函数进行调试 317
11.1.3 检查回溯 319
11.1.4 使用Python调试器 321
11.1.5 检查日志文件 323
11.1.6 其他技巧 326
11.1.7 去哪里寻找相关的信息 327
11.2 故障排除指南 327
11.2.1 使用控制台编辑器 327
11.2.2 选择合适的地方放置调试断点 327
11.2.3 使用测试进行调试 328
11.2.4 监视 328
11.3 总结 328
第 12章 GUI和脚本 330
12.1 第 1种方法:脚本 332
12.1.1 导入部分 332
12.1.2 解析参数 333
12.1.3 业务逻辑 335
12.2 第 2种方法:GUI应用程序 339
12.2.1 导入部分 341
12.2.2 布局逻辑 341
12.2.3 业务逻辑 345
12.2.4 改进GUI应用程序 351
12.3 进一步了解GUI应用程序 352
12.3.1 turtle模块 352
12.3.2 wxPython、PyQt和PyGTK 353
12.3.3 最小惊讶原则 353
12.3.4 线程方面的考虑 353
12.4 总结 354
第 13章 数据科学 355
13.1 IPython和Jupyter Notebook 356
13.1.1 安装必要的程序库 358
13.1.2 使用Anaconda 358
13.1.3 启动Notebook 359
13.2 处理数据 359
13.2.1 设置Notebook 360
13.2.2 准备数据 360
13.2.3 整理数据 364
13.2.4 创建DataFrame 366
13.2.5 把DataFrame保存到文件 375
13.2.6 显示结果 375
13.3 数据科学和Python的更多工具 381
13.4 总结 383
第 14章 Web开发 384
14.1 Web 384
14.2 Web的工作方式 385
14.3 Django Web框架 385
14.3.1 Django的设计原则 386
14.3.2 Django的URL分配器 388
14.4 一个regex网站 389
14.4.1 安装Django 389
14.4.2 添加Entry模型 392
14.4.3 对管理员面板进行自定义 393
14.4.4 创建表单 396
14.4.5 编写视图 397
14.4.6 连接URL和视图 401
14.4.7 编写模板 403
14.5 Web开发的未来 409
14.5.1 编写Flask视图 409
14.5.2 用Falcon创建JSON语录服务器 411
14.6 总结 413
14.7 再见 414