畅销经典《笨办法学Python 3》涵盖从基础编程技术到软件开发的完整过程,带你快速上手Python 3.6开发。如果你已经掌握了《笨办法学Python 3》的入门知识,那么接下来该读哪一本?
当然是Zed,A.,Shaw的《笨办法学Python 3 进阶篇》,这本进阶篇超越基础,提升实践水平。《笨办法学Python 3 进阶篇》会让你每一分钟投入都有回报。你很快就会超越单纯地编写能运行的代码,转而编写能解决实际问题的高质量的Python代码。
从进阶篇你将学会什么?
- 使用文本编辑器管理复杂的项目
- 学会利用数据结构的强大功能
- 应用算法处理数据结构
- 掌握必要的文本分析和处理技术
- 使用SQL有效且合逻辑地对存储数据进行建模
- 学习强大的命令行工具和使用技能
- 在完整的项目中结合多种实践
哪类人群适合这本书?
- 有Python编程基础
- 但在实现想法时屡屡受挫的初级开发人员
- 有丰富Python编程经验,希望进一步提升编程实践技能的专业程序员
- 用好这本书,你将成为一名优秀的Python程序员
笨办法学Python 3 进阶篇
¥54.3
购买
目录
第一部分 准备知识 1
如果不喜欢作者的个人流程怎么办 2
如果发现自己太糟糕怎么办 2
习题0 准备工作 3
程序员用的编辑器 3
Python 3.6 3
工作终端 4
pip和virtualenv的配置 4
实验笔记 4
GitHub账号 5
git 5
可选:录屏软件 5
进一步研究 5
习题1 论流程 7
习题挑战 8
巩固练习 9
进一步研究 9
习题2 论创新 11
习题挑战 11
巩固练习 12
习题3 论质量 13
习题挑战 14
巩固学习 14
第二部分 快速实现 15
如何练习创新 16
为新手准备的流程 17
新手的写代码流程 17
习题4 处理命令行参数 19
习题挑战 19
答案 20
巩固练习 20
习题5 cat 21
习题挑战 21
答案 22
巩固练习 22
进一步研究 23
习题6 find 25
习题挑战 26
巩固练习 26
进一步研究 27
习题7 grep 29
习题挑战 29
巩固练习 30
进一步研究 30
习题8 cut 31
习题挑战 32
巩固练习 32
进一步研究 32
习题9 sed 33
习题挑战 33
巩固练习 34
进一步研究 34
习题10 sort 35
习题挑战 35
巩固练习 36
进一步研究 36
习题11 uniq 37
习题挑战 37
巩固学习 38
进一步研究 38
习题12 复习 39
习题挑战 39
巩固练习 40
进一步研究 40
第三部分 数据结构 43
通过数据结构学习质量 44
如何学习数据结构 44
习题13 单链表 47
描述 47
控制器 48
测试 50
审计概述 52
习题挑战 53
审计 53
巩固练习 54
习题14 双链表 55
介绍不变条件 56
习题挑战 57
巩固练习 58
习题15 栈和队列 59
习题挑战 60
破坏代码 61
进一步研究 61
习题16 冒泡排序、快速排序和归并排序 63
习题挑战 63
冒泡排序 65
归并排序 66
归并排序的作弊模式 67
快速排序 69
巩固练习 69
习题17 字典 71
习题挑战 71
创建“代码的原版副本” 71
复制代码 72
注解代码 75
总结数据结构 76
记住总结 76
凭借记忆实现 77
重复 78
巩固练习 78
破坏代码 78
习题18 测量性能 79
工具 79
timeit 79
cProfile和profile 80
分析性能 82
习题挑战 83
巩固练习 83
破坏代码 83
进一步研究 84
习题19 提高性能 85
习题挑战 86
进一步研究 87
习题20 二叉查找树 89
二叉查找树必备知识 89
删除 90
习题挑战 91
巩固练习 91
习题21 二分搜索 93
习题挑战 93
巩固练习 94
进一步研究 94
习题22 后缀数组 95
习题挑战 96
巩固练习 96
进一步研究 97
习题23 三叉查找树 99
习题挑战 99
巩固练习 101
习题24 快速URL搜索 103
习题挑战 103
巩固练习 104
进一步研究 104
第四部分 中阶项目 105
跟踪代码缺陷 105
习题25 xargs 107
习题挑战 107
巩固练习 107
习题26 hexdump 109
习题挑战 110
巩固练习 111
进一步研究 111
习题27 tr 113
习题挑战 113
45分钟工作时间段的利弊 114
巩固练习 114
习题28 sh 115
习题挑战 115
巩固练习 116
进一步研究 116
习题29 diff和patch 117
习题挑战 117
巩固练习 118
进一步研究 118
第五部分 解析文本 119
介绍代码覆盖率 119
习题30 有限状态机 121
习题挑战 122
巩固练习 124
进一步研究 124
习题31 正则表达式 125
习题挑战 126
巩固练习 127
进一步研究 127
习题32 扫描器 129
运行Python扫描器 130
习题挑战 132
巩固练习 132
进一步研究 133
习题33 解析器 135
递归下降解析 136
BNF文法 137
解析器快速演示 139
习题挑战 141
巩固练习 141
进一步研究 142
习题34 分析器 143
访问者模式 143
短小的Puny Python分析器 144
解析器和分析器的对比 147
习题挑战 147
巩固练习 148
进一步研究 148
习题35 解释器 149
解释器和编译器的对比 149
Python两者皆是 150
如何写解释器 150
习题挑战 151
巩固练习 151
进一步研究 151
习题36 简单计算器 153
习题挑战 153
巩固练习 154
进一步研究 154
习题37 小小BASIC 155
习题挑战 155
巩固练习 156
第六部分 SQL和对象关系映射 157
理解SQL就是理解表 157
你将学到什么 158
习题38 SQL简介 159
什么是SQL 159
准备工作 160
学习SQL术语 161
SQL文法 162
进一步研究 162
习题39 SQL的创建操作 163
创建表 163
创建多表数据库 164
插入数据 165
插入参考数据 165
习题挑战 165
进一步研究 166
习题40 SQL的读取操作 167
跨表选择行 167
习题挑战 168
进一步研究 169
习题41 SQL的更新操作 171
更新复杂数据 171
替换数据 172
习题挑战 173
进一步研究 173
习题42 SQL的删除操作 175
使用别的表进行删除 175
习题挑战 176
进一步研究 177
习题43 SQL管理 179
删除和修改表 179
迁移和数据演化 180
习题挑战 181
进一步研究 182
习题44 使用Python的数据库API 183
学习API 183
习题挑战 184
进一步研究 184
习题45 创建ORM 185
习题挑战 185
进一步研究 186
第七部分 终极项目 187
你的流程是什么 187
习题46 博客 189
习题挑战 189
巩固练习 190
习题47 bc 191
习题挑战 191
巩固练习 192
习题48 ed 193
习题挑战 193
巩固练习 194
习题49 sed 195
习题挑战 196
巩固练习 196
习题50 vi 197
习题挑战 197
巩固练习 198
习题51 lessweb 199
习题挑战 199
破坏代码 199
巩固练习 200
习题52 moreweb 201
习题挑战 201
破坏代码 202
进一步研究 202
如果您还在入门阶段,那么请选择Zed,A.,Shaw的《笨办法学Python 3》
这本书的目的是让你起步编程。虽然书名说是用“Hard Way”(笨办法)学习写程序,但其实并非如此。所谓的“笨办法”指的是本书的教学方式,也就是所谓的“指令式”教学。在这个过程中,我会让你完成一系列习题,而你则通过反复练习来学到技能,这些习题也是专为反复练习而设计的。对于一无所知的初学者来说,在能理解更复杂的话题之前,这种教授方式效果是很好的。你可以在各种场合看到这种教授方式,从武术到音乐不一而足,甚至在学习基本的算术和阅读技能时也会看到这种教学方式。
本书通过练习和记忆的方式,指导你逐渐掌握使用Python编程的技能,然后由浅入深,让你将这些技能应用到各种问题上。读完本书之后,你将有能力接触学习复杂的编程主题所需的工具。我喜欢告诉别人:我的这本书能给你一个“编程黑带”。意思就是说,你已经打好了基础,可以真正开始学习编程了。
如果你肯努力,并投入一些时间,掌握了这些技能,你将学会如何编写代码。
来点干货,分享《笨办法学Python 3》样章:
习题39 字典,可爱的字典
接下来你要学习Python的“字典”数据结构了,字典是类似列表的一种存储数据的方法,但要获取其中的数据,你用的不是数值索引,而是任何你想用的东西。这样你就可以把字典当作数据库来存储和组织数据了。
我们比较一下字典和列表的功能。你看,列表可以让你做这样的事情。
习题39 Python会话
>>> things = ['a', 'b', 'c', 'd']
>>> print(things[1])
b
>>> things[1] = 'z'
>>> print(things[1])
z
>>> things
['a', 'z', 'c', 'd']
你可以使用数值作为列表的索引,也就是可以通过数值找到列表中的元素。到目前为止,你应该了解这一点,但是请确定你已经理解:你只能使用数值来获取列表中的项。
字典所做的是,让你可以通过任何东西(不只是数值)找到元素。是的,字典可以将一样东西和另外一样东西关联,不管它们的类型是什么,我们来看看。
习题39 Python会话
>>> stuff = {'name': 'Zed', 'age': 39, 'height': 6*12+2}
>>> print(stuff['name'])
Zed
>>> print(stuff['age'] )
39
>>> print(stuff['height'] )
74
>>> stuff['city'] = "SF"
>>> print(stuff['city'])
SF
你将看到除了通过数值,还可以用字符串来从字典中获取stuff
,我们还可以用字符串来往字典中添加元素。当然它支持的不只有字符串,我们还可以做下面这样的事情。
习题39 Python会话
>>> stuff[1] = "Wow"
>>> stuff[2] = "Neato"
>>> print(stuff[1])
Wow
>>> print(stuff[2])
Neato
在这里我使用了两个数值。其实我可以使用任何东西,不过这么说并不准确,你先这么理解就行了。
当然了,一个只能放东西进去的字典是没什么意思的,所以我们还要有删除东西的方法,也就是使用del
这个关键字。
习题39 Python会话
>>> del stuff['city']
>>> del stuff[1]
>>> del stuff[2]
>>> stuff
{'name': 'Zed', 'age': 39, 'height': 74}
字典的例子
接下来要做一个练习,你必须非常仔细。我要求你录入这个习题的代码,然后试着弄懂它做了些什么。注意为字典添加元素,从散列值获取元素,以及别的操作是怎样实现的。这个例子先把美国的州名与其简称映射起来,再把城市简称与其全称映射起来。记住,字典的关键理念就是映射(或关联)。
ex39.py
1 # create a mapping of state to abbreviation
2 states = {
3 'Oregon': 'OR',
4 'Florida': 'FL',
5 'California': 'CA',
6 'New York': 'NY',
7 'Michigan': 'MI'
8 }
9
10 # create a basic set of states and some cities in them
11 cities = {
12 'CA': 'San Francisco',
13 'MI': 'Detroit',
14 'FL': 'Jacksonville'
15 }
16
17 # add some more cities
18 cities['NY'] = 'New York'
19 cities['OR'] = 'Portland'
20
21 # print out some cities
22 print('-' * 10)
23 print("NY State has: ", cities['NY'])
24 print("OR State has: ", cities['OR'])
25
26 # print some states
27 print('-' * 10)
28 print("Michigan's abbreviation is: ", states['Michigan'])
29 print("Florida's abbreviation is: ", states['Florida'])
30
31 # do it by using the state then cities dict
32 print('-' * 10)
33 print("Michigan has: ", cities[states['Michigan']])
34 print("Florida has: ", cities[states['Florida']])
35
36 # print every state abbreviation
37 print('-' * 10)
38 for state, abbrev in list(states.items()):
39 print(f"{state} is abbreviated {abbrev}")
40
41 # print every city in state
42 print('-' * 10)
43 for abbrev, city in list(cities.items()):
44 print(f"{abbrev} has the city {city}")
45
46 # now do both at the same time
47 print('-' * 10)
48 for state, abbrev in list(states.items()):
49 print(f"{state} state is abbreviated {abbrev}")
50 print(f"and has city {cities[abbrev]}")
51
52 print('-' * 10)
53 # safely get a abbreviation by state that might not be there
54 state = states.get('Texas')
55
56 if not state:
57 print("Sorry, no Texas.")
58
59 # get a city with a default value
60 city = cities.get('TX', 'Does Not Exist')
61 print(f"The city for the state 'TX' is: {city}")
应该看到的结果
习题39 会话
$ python3.6 ex39.py
----------
NY State has: New York
OR State has: Portland
----------
Michigan's abbreviation is: MI
Florida's abbreviation is: FL
----------
Michigan has: Detroit
Florida has: Jacksonville
----------
Oregon is abbreviated OR
Florida is abbreviated FL
California is abbreviated CA
New York is abbreviated NY
Michigan is abbreviated MI
----------
CA has the city San Francisco
MI has the city Detroit
FL has the city Jacksonville
NY has the city New York
OR has the city Portland
----------
Oregon state is abbreviated OR
and has city Portland
Florida state is abbreviated FL
and has city Jacksonville
California state is abbreviated CA
and has city San Francisco
New York state is abbreviated NY
and has city New York
Michigan state is abbreviated MI
and has city Detroit
----------
Sorry, no Texas.
The city for the state 'TX' is: Does Not Exist
字典可以做什么
字典是又一种数据结构,和列表一样,它是编程中最常用的数据结构之一。字典的用处是把你要存储的东西和你的键映射或者关联起来。再强调一次,程序员说的“字典”和我们用来查字的字典差不多,所以我们可以以实际的字典为例说明一下。
假设你要查一下“honorificabilitudinitatibus”是什么意思,现在你只要将这个单词复制到搜索引擎里就能查到答案,我们也可以说搜索引擎就是一个很大、很复杂的《牛津英语词典》。在搜索引擎存在之前,我们是这样做的。
1.到图书馆找一本词典,假设就是《牛津英语词典》好了。
2.你知道honorificabilitudinitatibus第一个字母是H,所以你在字典边上找到H标签。
3.翻几页,直到接近开头是hon的页面。
4.再翻几页,直到找到honorificabilitudinitatibus,或者你一直找下去碰到了hp开头的词,这说明词典里没有你要找的词。
5.找到以后,阅读定义,看它是什么意思。
这一过程和“字典”的工作原理几乎完全一致,你把单词“honorificabilitudinitatibus”映射到了它的定义。Python的字典和《牛津英语词典》之类的字典是很相似的。
巩固练习
1.用一样的映射方式,匹配一下你们国家或者别的国家的省和城市。
2.在Python文档中找到字典的相关内容,学着对字典做更多的操作。
3.找出一些字典无法做到的事情。
常见问题回答
列表和字典有何不同?
列表是一些项的有序排列,而字典是将一些项(键)对应到另外一些项(值)的数据结构。
字典能用在哪里?
各种需要通过某个值去查看另一个值的场合。事实上,你也可以把字典叫“查找表”。
列表能用在哪里?
列表是专供需要有序排列的数据使用的。只要知道索引就能查到对应的值了。
有没有办法弄一个可以排序的字典?
看看Python里的collections.OrderedDict
数据结构。上网搜索一下其文档和用法。