Python带我起飞
出版信息
李金洪 / 电子工业出版社 / 2018-6 / 79
内容简介
《Python带我起飞——入门、进阶、商业实战》针对Python 3.5 以上版本,采用“理论+实践”的形式编写,通过大量的实例(共42 个),全面而深入地讲解“Python 基础语法”和“Python 项目应用”两方面内容。书中的实例具有很强的实用性,如对医疗影像数据进行分析、制作爬虫获取股票信息、自动化实例、从一组看似混乱的数据中找出规律、制作人脸识别系统等。
《Python带我起飞——入门、进阶、商业实战》的每章都配有同步的教学视频。视频和图书具有相同的结构,能帮助读者快速而全面地了解本章的内容。《Python带我起飞——入门、进阶、商业实战》还免费提供了所有案例的源代码及素材样本。这些代码和素材样本不仅方便了读者学习,而且也能为以后的工作提供便利。
《Python带我起飞——入门、进阶、商业实战》共分为4 篇:第1 篇,包括了解Python、配置机器及搭建开发环境、语言规则;第2 篇,介绍了Python 语言的基础操作,包括变量与操作、控制流、函数操作、错误与异常、文件操作;第3 篇,介绍了更高级的Python 语法知识及应用,包括面向对象编程、系统调度编程;第4 篇,是前面知识的综合应用,包括爬虫实战、自动化实战、机器学习实战、人工智能实战。
《Python带我起飞——入门、进阶、商业实战》结构清晰、案例丰富、通俗易懂、实用性强。特别适合Python 语言的初学和进阶读者,作为自学教程阅读。另外,本书也适合社会培训学校作为培训教材使用,还适合大中专院校的相关专业作为教学参考书。
作者简介
李金洪
“大蛇智能”网站创始人、“代码医生”工作室主程序员。
精通Python、C、C++、汇编、Java和Go等多种编程语言。擅长神经网络、算法、协议分析、逆向工程和移动互联网安全架构等技术。在深度学习领域,参与过某移动互联网后台的OCR项目、某娱乐节目机器人的语音识别和声纹识别项目,以及人脸识别、活体检测等多个项目。在“代码医生”工作室工作期间,完成过金融、安全、市政和医疗等多个领域的AI算法外包项目。
曾发布过两套关于CNTK深度学习框架的视频教程。出版过《深度学习之TensorFlow——入门、原理与进阶实战》一书。
目录
--------------第1篇 入门
第1章 了解Python/2
----1.1 了解Python的历史/2
----1.2 Python可以做什么/3
----1.3 Python在数据科学中的地位及前景/3
----1.4 如何使用本书/3
第2章 配置机器及搭建开发环境/5
----本章教学视频说明/5
----2.1 Python版本及开发环境介绍/6
--------2.1.1 Python的运行方式/6
--------2.1.2 常见的集成开发环境(IDE)/7
----2.2 下载及安装Anaconda/7
----2.3 熟悉Anaconda 3开发工具/10
--------2.3.1 快速了解Spyder/11
--------2.3.2 快速了解Jupyter Notebook/14
----2.4 实例1:运行Python程序,并传入参数/14
----2.4.1 在Spyder中新建Python文件,编写代码,运行代码/15
----2.4.2 用命令行启动Python程序,并传入参数/16
----2.4.3 用Spyder启动Python程序,并传入参数/17
第3章 语言规则——Python的条条框框/19
----本章教学视频说明/19
----3.1 了解编程语言的分类/20
----3.2 基础规则/21
----3.2.1 了解Python源代码相关的几个概念/22
----3.2.2 语句的基本规则:变量、语句、代码块/22
----3.2.3 添加注释/23
----3.2.4 使用Python的“帮助”/24
----3.3 代码文件的结构/24
----3.3.1 模块/24
----3.3.2 包/25
----3.4 模块的详细介绍/26
----3.4.1 模块的作用及分类/26
----3.4.2 模块的基本使用方法/27
----3.4.3 模块的搜索路径/27
----3.4.4 模块的属性/28
----3.4.5 模块名字的可变性/28
----3.4.6 模块的常规写法/29
----3.5 模块的四种导入方式/29
----3.5.1 import as方式/29
----3.5.2 from import方式/29
----3.5.3 from import * 方式/30
----3.5.4 导入文件名中带空格的模块/31
----3.6 实例2:封装获取系统信息的模块,并将其导入/31
----3.6.1 在当前代码中的函数与模块中的函数同名情况下,导入模块/32
----3.6.2 在模块与当前代码不在同一路径的情况下,导入模块/34
----3.6.3 导入上级路径的模块/35
------------------第2篇 进阶
第4章 变量——编写代码的基石/38
----本章教学视频说明/38
----4.1 什么是变量/39
----4.2 了解变量的规则/40
----4.2.1 明白变量的本质——对象/40
----4.2.2 同时定义多个变量/40
----4.2.3 变量类型介绍/41
----4.2.4 变量类型的帮助函数/41
----4.3 numbers(数字)类型/42
----4.3.1 获取对象的类型/42
----4.3.2 算术运算符/42
----4.3.3 实例3:演示“算术运算符”的使用/43
----4.3.4 赋值运算符/44
----4.3.5 实例4:演示“赋值运算符”的使用/44
----4.3.6 比较运算符/45
----4.3.7 实例5:演示“比较运算符”的使用/46
----4.3.8 慎用is函数/48
----4.3.9 实例6:演示Python的缓存机制/50
----4.3.10 布尔型关系的运算符/52
----4.3.11 位运算符/53
----4.3.12 实例7:演示“位运算符”的使用/54
----4.4 strings(字符串)类型/54
----4.4.1 字符串的描述/55
----4.4.2 转义符/56
----4.4.3 屏幕I/O及格式化/59
----4.4.4 实例8:以字符串为例,演示“序列”类型的运算及操作/65
----4.4.5 关于切片的特殊说明/67
----4.4.6 字符串的相关函数/68
----4.5 list(列表)类型/69
----4.5.1 list的运算及操作/70
----4.5.2 list的内置方法/70
----4.5.3 实例9:演示list使用中的技巧及注意事项/71
----4.5.4 列表嵌套/74
----4.5.5 实例10:使用list类型实现队列和栈/74
----4.5.6 实例11:使用函数filter筛选列表——筛选学生列表中的偏科学生名单/77
----4.6 tuple(元组)类型/79
----4.6.1 tuple的描述/79
----4.6.2 运算及操作/80
----4.6.3 实例12:演示tuple的用法/80
----4.7 set(集合)类型/83
----4.7.1 set的描述/83
----4.7.2 set的运算/84
----4.7.3 set的内置方法/84
----4.7.4 不可变集合/85
----4.8 dictionary(字典)类型/85
----4.8.1 字典的描述/86
----4.8.2 字典的运算/86
----4.8.3 字典的内置方法/88
----4.9 对组合对象进行“深拷贝”和“浅拷贝”/88
----4.9.1 浅拷贝/88
----4.9.2 深拷贝/89
第5章 控制流——控制执行顺序的开关/91
----本章教学视频说明/91
----5.1 if语句/92
----5.1.1 语句形式/92
----5.1.2 演示if语句的使用/92
----5.1.3 实例13:根据来访人的性别选择合适的称呼/93
----5.2 while语句/94
----5.2.1 语句形式/94
----5.2.2 演示while语句的使用/94
----5.2.3 实例14:将十进制数转化为二进制数/95
----5.3 for语句/96
----5.3.1 语句形式/96
----5.3.2 在for循环中,使用切片/96
----5.3.3 在for循环中,使用内置函数range/97
----5.3.4 实例15:利用循环实现冒泡排序/98
----5.3.5 在for循环中,使用内置函数zip/99
----5.3.6 在for循环中,使用内置函数enumerate/101
----5.4 对循环进行控制——break、continue、pass语句/102
----5.5 实例16:演示人机对话中的控制流程(综合应用前面语句)/102
----5.6 利用for循环实现列表推导式/104
----5.7 实例17:利用循环来打印“九九乘法表”/105
----5.8 理解for循环的原理——迭代器/106
第6章 函数——功能化程序片段的封装/108
----本章教学视频说明/108
----6.1 函数的基本概念/109
----6.1.1 函数的定义/109
----6.1.2 函数的组成部分/109
----6.1.3 函数的参数:形参与实参/110
----6.1.4 函数的返回值/111
----6.1.5 函数的属性/111
----6.1.6 函数的本质/112
----6.1.7 函数的分类/112
----6.1.8 实例18:打印两个心形图案/113
----6.2 定义参数及调用函数/115
----6.2.1 函数参数的定义方法与调用形式/115
----6.2.2 在函数调用中检查参数/121
----6.2.3 函数调用中的参数传递及影响/122
----6.3 匿名函数与可迭代函数/124
----6.3.1 匿名函数与可迭代函数的介绍/124
----6.3.2 匿名函数与reduce函数的组合应用/125
----6.3.3 匿名函数与map函数的组合应用/125
----6.3.4 匿名函数与filter函数的组合应用/126
----6.3.5 可迭代函数的返回值/127
----6.4 偏函数/128
----6.5 递归函数/129
----6.6 eval与exec函数/130
----6.6.1 eval与exec的区别/130
----6.6.2 eval与exec的定义/130
----6.6.3 exec和eval的使用经验/132
----6.6.4 eval与exec的扩展知识/134
6.7 实例19:批量测试转化函数(实现“组合对象”与“字符串”的相互转化)/134
----6.7.1 编写两个功能函数/135
----6.7.2 编写单元测试用例/135
----6.7.3 批量运行单元测试用例/136
6.8 生成器函数/137
----6.8.1 生成器与迭代器的区别/137
----6.8.2 生成器函数/137
----6.8.3 生成器表达式/137
6.9 变量的作用域/138
----6.9.1 作用域介绍/138
----6.9.2 global语句/140
----6.9.3 nonlocal语句/140
6.10 工厂函数/141
----6.10.1 普通工厂函数的实现/141
----6.10.2 闭合函数(closure)/142
----6.10.3 装饰器(decorator)/143
----6.10.4 @修饰符/144
----6.10.5 更高级的装饰器/145
----6.10.6 解决“同作用域下默认参数被覆盖”问题/151
第7章 错误与异常——调教出听话的程序/153
本章教学视频说明/153
7.1 错误的分类/154
----7.1.1 语法错误/154
----7.1.2 运行时错误/154
7.2 异常的基本语法/155
----7.2.1 同时处理多个异常/156
----7.2.2 异常处理中的else语句/157
----7.2.3 输出未知异常/157
----7.2.4 输出异常的详细信息/158
7.3 捕获与处理异常/160
----7.3.1 异常的处理流程/161
----7.3.2 try语句的工作原理/161
----7.3.3 一些常见的异常/161
7.4 创建异常/163
----7.4.1 创建异常的方法/163
----7.4.2 创建异常举例/163
7.5 异常的最终处理(清理动作)/164
----7.5.1 finally的使用场景/164
----7.5.2 finally与else的区别/165
7.6 判定条件的正确性(断言)/165
----7.6.1 断言的表达形式/165
----7.6.2 带错误信息的断言语句/166
7.7 实例20:如HTTP请求失败,实现“重试”功能/166
----7.7.1 使用装饰器实现失败重试/167
----7.7.2 编写简单爬虫/168
----7.7.3 传入正确的目的地址,开始爬取/168
----7.7.4 传入错误的目的地址,验证“重试”功能/169
第8章 文件操作——数据持久化的一种方法/170
本章教学视频说明/170
8.1 文件的基本操作/171
----8.1.1 读写文件的一般步骤/171
----8.1.2 打开文件/172
----8.1.3 具体读写/173
----8.1.4 关闭文件/174
8.2 文件对象的方法/175
----8.2.1 文件对象的常用方法介绍/175
----8.2.2 把文件对象当作迭代器来读取/176
8.3 实例21:带有异常处理的文件操作/177
8.4 使用with语句简化代码/178
----8.4.1 实例22:使用with语句操作文件/178
----8.4.2 with语法的原理/179
8.5 实现字符串与二进制数的相互转化/179
----8.5.1 将字符串转二进制数/180
----8.5.2 将二进制数转字符串/180
8.6 将任意对象序列化/181
----8.6.1 pickle函数/181
----8.6.2 实例23:用pickle函数实现元组与“二进制对象”“二进制对象文件”之间的转换
----8.6.3 序列化的扩展方法(ZODB模块)/185
8.7 实例24:批量读取及显示CT医疗影像数据/185
----8.7.1 DICOM介绍/185
----8.7.2 Python中的DICOM接口模块/186
----8.7.3 编写代码以载入DICOM文件/186
----8.7.4 读取DICOM中的数值/187
----8.7.5 显示单张DICOM数据图像/189
----8.7.6 批量生成DICOM数据图像/189
------------------第3篇 高阶
第9章 类——面向对象的编程方案/192
本章教学视频说明/192
9.1 类的相关术语及实现/193
----9.1.1 创建类/194
----9.1.2 创建类属性/194
----9.1.3 定义类的动态属性/195
----9.1.4 限制类属性(__slots__)/196
9.2 实例化类对象/197
----9.2.1 带有初始值的实例化/197
----9.2.2 class中的self/198
----9.2.3 类方法(@classmethod)与静态方法(@staticmethod)/200
----9.2.4 类变量与实例变量的区别/202
----9.2.5 销毁类实例化对象/203
9.3 类变量的私有化类属性/204
----9.3.1 公有化(public)与私有化(private)/204
----9.3.2 私有化的实现/205
----9.3.3 使用装饰器技术实现类的私有化(@property)/207
9.4 实现子类/209
----9.4.1 继承/209
----9.4.2 实例25:演示类的继承/211
----9.4.3 super函数/212
----9.4.4 实例26:演示super函数的功能/212
9.5 类相关的常用内置函数/216
----9.5.1 判断实例(isinstance)/216
----9.5.2 判断子类(issubclass)/216
----9.5.3 判断类实例中是否含有某个属性(hasattr)/217
----9.5.4 获得类实例中的某个属性(getattr)/217
----9.5.5 设置类实例中的某个属性值(setattr)/217
9.6 重载运算符/218
----9.6.1 重载运算符的方法与演示/218
----9.6.2 可重载的运算符/219
9.7 包装与代理/220
----9.7.1 包装/220
----9.7.2 代理/221
----9.7.3 实例27:使用代理的方式实现RESTful API接口/222
9.8 自定义异常类/225
----9.8.1 自定义异常类的方法/225
----9.8.2 实例28:自定义异常类的多重继承与使用/226
9.9 支持with语法的自定义类/228
----9.9.1 实现支持with语法的类/229
----9.9.2 实例29:代码实现自定义类,并使其支持with语法/229
9.10 “自定义迭代器类”的实现与调试技巧/231
----9.10.1 实例30:自定义迭代器,实现字符串逆序/231
----9.10.2 调试技巧/233
9.11 元类(MetaClass)/238
----9.11.1 Class的实现原理/238
----9.11.2 元类的介绍/239
第10章 系统调度——实现高并发的处理任务/242
本章教学视频说明/242
10.1 进程与线程/243
10.2 线程/243
----10.2.1 线程的创建及原理/244
----10.2.2 互斥锁/248
----10.2.3 实例31:使用信号量来同步多线程间的顺序关系/251
----10.2.4 实例32:实现基于事件机制的消息队列/254
----10.2.5 实例33:使用条件锁同步多线程中的生产者与消费者关系/257
----10.2.6 实例34:创建定时器触发程序,在屏幕上输出消息/259
----10.2.7 实例35:使用线程池提升运行效率/261
----10.2.8 需要创建多少个线程才算合理/265
10.3 进程/265
----10.3.1 实例36:创建多进程的程序/265
----10.3.2 多进程与多线程的区别/268
10.4 协程/268
----10.4.1 协程的相关概念及实现步骤/269
----10.4.2 实例37:使用协程实现“任务提交”与“结果接收”/270
10.5 应该选择线程,还是协程/271
10.6 实例38:使用协程批量修改文件扩展名/271
------------------第4篇 商业实战
第11章 爬虫实战(实例39):批量采集股票数据,并保存到Excel中/276
11.1 爬取股票代码/276
----11.1.1 找到目标网站/277
----11.1.2 打开调试窗口,查看网页代码/277
----11.1.3 在网页源码中找到目标元素/278
----11.1.4 分析目标源代码,找出规律/278
----11.1.5 编写代码抓取股票代码/279
----11.1.6 运行代码,显示结果/280
11.2 爬取股票内容/280
----11.2.1 编写代码抓取批量内容/280
----11.2.2 运行代码显示结果/281
11.3 爬虫项目的其他技术/282
第12章 自动化实战(实例40):读取Excel数据文件,并用可视化分析/283
12.1 使用Pandas读取Excel文件,并用Matplotlib生成大盘走势图/283
12.2 使用Pandas处理数据并绘制成图/285
----12.2.1 使用Pandas处理数据/285
----12.2.2 绘制直方图和折线图/286
12.3 自动化数据处理的其他技术/287
第13章 机器学习实战(实例41):从一组看似混乱的数据中找出y≈2x的规律/288
13.1 准备数据/288
13.2 训练模型并实现可视化/290
----13.2.1 训练模型/290
----13.2.2 利用模型进行预测/290
----13.2.3 了解线性回归模型的内部原理/291
----13.2.4 将模型可视化/291
13.3 评估模型/292
----13.3.1 评估模型的基本思路/292
----13.3.2 用代码实现模型评估/293
13.4 保存模型,应用模型/293
13.5 机器学习的方向/294
第14章 人工智能实战(实例42):基于人脸识别的“来访登记系统”/295
14.1 安装案例所依赖的模块/295
14.2 安装及使用dlib模块/296
----14.2.1 下载dlib模块/296
----14.2.2 安装dlib模块/298
----14.2.3 使用dlib模块进行人脸检测/299
14.3 安装及使用face_recognition模块/300
----14.3.1 下载face_recognition模块/300
----14.3.2 下载及安装face_recognition_models模型/301
----14.3.3 使用face_recognition模块检测人脸中的特征点/303
14.4 安装及使用opencv模块/304
----14.4.1 下载并安装opencv模块/304
----14.4.2 下载中文字体/304
----14.4.3 使用opencv调用摄像头进行拍照/305
14.5 安装及使用yagmail模块/306
----14.5.1 安装yagmail模块/306
----14.5.2 使用yagmail模块向自己的QQ邮箱发送邮件/306
14.6 详细设计/309
----14.6.1 需求描述/310
----14.6.2 定义系统的输入和输出/310
----14.6.3 系统规则及约束/310
----14.6.4 结构体设计/310
----14.6.5 软件的主体架构图/311
----14.6.6 软件的主体流程介绍/312
14.7 编码实现/312
----14.7.1 导入模块/312
----14.7.2 定义结构体/313
----14.7.3 实现发送邮件函数/313
----14.7.4 实现邮件内容生成函数/313
----14.7.5 实现过滤并保存来访记录的函数/314
----14.7.6 实现定时器处理函数/314
----14.7.7 在主线程中启动定时器线程/315
----14.7.8 实现并调用函数载入人脸库/315
----14.7.9 在主循环里调用摄像头,并进行人脸识别/316
14.8 运行程序/318
14.9 下一步对系统的改进/319
----附录A 内置函数/321