Skip to content

Commit a77f01f

Browse files
committed
更新了番外篇内容
1 parent eb96ffd commit a77f01f

23 files changed

+89
-157
lines changed

番外篇/Python参考书籍.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
7. 《Flask Web开发:基于Python的Web应用开发实战》(*Flask Web Development: Developing Web Applications with Python*
3030
8. 《深入理解Flask》(*Mastering Flask*
3131

32-
### 爬虫开发
32+
### 数据采集
3333

3434
1. 《用Python写网络爬虫》(*Web Scraping with Python*
3535
2. 《精通Python爬虫框架Scrapy》(*Learning Scrapy*

番外篇/Python容器使用小技巧.md

+9-15
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Python中提供了非常丰富的容器型数据类型,大家最为熟悉的有`list``tuple``set``dict`等。下面为大家分享一些使用这些类型的小技巧,希望帮助大家写出更加Pythonic的代码。
44

5-
### 从字典中取最大
5+
#### 1. 从字典中取最大
66

77
假设字典对象对应的变量名为`my_dict`
88

@@ -46,7 +46,7 @@ Python中提供了非常丰富的容器型数据类型,大家最为熟悉的
4646
> return g
4747
> ```
4848

49-
### 统计列表元素出现次数
49+
#### 2. 统计列表元素出现次数
5050

5151
假设列表对象对应的变量名为`my_list`
5252

@@ -72,7 +72,7 @@ from collections import Counter
7272
dict(Counter(my_list))
7373
```
7474

75-
### 截断列表元素
75+
#### 3. 截断列表元素
7676

7777
假设列表对象对应的变量名为`my_list`,通常大家会想到用下面的方式来截断列表。
7878
```Python
@@ -87,7 +87,7 @@ del my_list[i:]
8787
del my_list[:j]
8888
```
8989

90-
### 按最长列表实现zip操作
90+
#### 4. 按最长列表实现zip操作
9191

9292
Python的内置函数`zip`可以产生一个生成器对象,该生成器对象将两个或多个可迭代对象的元素组装到一起,如下所示。
9393

@@ -115,7 +115,7 @@ list(zip_longest('abc', [1, 2, 3, 4]))
115115
[('a', 1), ('b', 2), ('c', 3), (None, 4)]
116116
```
117117

118-
### 快速拷贝一个列表
118+
#### 5. 快速拷贝一个列表
119119

120120
如果希望快速拷贝一个列表对象,可以通过切片操作来实现,但是切片操作仅实现了浅拷贝,简单的说就是切片创建了新的列表对象,但是新列表中的元素是和之前的列表共享的。如果希望实现深拷贝,可以使用`copy`模块的`deepcopy`函数。
121121

@@ -141,7 +141,7 @@ list(zip_longest('abc', [1, 2, 3, 4]))
141141
thy_list = copy.deepcopy(my_list)
142142
```
143143

144-
### 对两个或多个列表对应元素进行操作
144+
#### 6. 对两个或多个列表对应元素进行操作
145145

146146
Python内置函数中的`map`函数可以对一个可迭代对象中的元素进行“映射”操作,这个函数在批量处理数据时非常有用。但是很多人都不知道,这个函数还可以作用于多个可迭代对象,通过传入的函数对多个可迭代对象中的对应元素进行处理,如下所示。
147147

@@ -165,7 +165,7 @@ thy_list = [2, 4, 6, 8, 10]
165165
[x + y for x, y in zip(my_list, thy_list)]
166166
```
167167

168-
### 处理列表中的空值和零值
168+
#### 7. 处理列表中的空值和零值
169169

170170
假设列表对象对应的变量名为`my_list`,如果列表中有空值(`None`)和零值,我们可以用下面的方式去掉空值和零值。
171171

@@ -179,7 +179,7 @@ list(filter(bool, my_list))
179179
[x for x in my_list if x]
180180
```
181181

182-
### 从嵌套列表中抽取指定列
182+
#### 8. 从嵌套列表中抽取指定列
183183

184184
假设`my_list`是一个如下所示的嵌套列表,该嵌套列表可以用来表示数学上的矩阵,如果要取出矩阵第一列的元素构成一个列表,我们可以这样写。
185185

@@ -219,10 +219,4 @@ list(col2)
219219
[1, 6, 3],
220220
[2, 7, 4],
221221
[2, 8, 4]]
222-
```
223-
224-
### 小结
225-
226-
不知道上面的内容有没有触及到大家的知识盲区,如果有的话欢迎在评论区留言讨论。
227-
228-
222+
```

番外篇/res/Backend-Roadmap.png

1.53 MB
Loading
1.27 MB
Loading

番外篇/res/DevOps-Roadmap.png

1.21 MB
Loading

番外篇/res/Python-Roadmap.png

681 KB
Loading
41.3 KB
Binary file not shown.

番外篇/res/pycharm-activation.png

-34.7 KB
Binary file not shown.
-86.6 KB
Binary file not shown.
-26 KB
Binary file not shown.
-164 KB
Binary file not shown.
-594 KB
Binary file not shown.
-90.8 KB
Binary file not shown.

番外篇/res/pycharm-run-result.png

-78.7 KB
Binary file not shown.

番外篇/res/pycharm-ui-themes.png

-260 KB
Binary file not shown.

番外篇/res/pycharm-welcome.png

-47.1 KB
Binary file not shown.

番外篇/res/pycharm-workspace.png

-209 KB
Binary file not shown.

番外篇/使用Hexo搭建自己的博客.md

+45-49
Large diffs are not rendered by default.

番外篇/分享学习路线图.md

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
## 分享几张学习路线图
2+
3+
今天逛了一个名为 [Developer Roadmaps](https://roadmap.sh) 的网站,上面就有好多的学习路线图。其中有一张关于 Python 的学习路线图还不错,分享给大家。如果用 Python 做工程化开发(后端开发、接口开发、应用开发等),这张图上的内容基本都是需要涉猎的;如果仅仅是将 Python 作为辅助工具,学习之前给大家整理的[《从零开始学Python》](https://www.zhihu.com/column/c_1216656665569013760)的 20 节课就已经足够了。近期,我也在重置这 20 节课的内容,重置后的内容会标记为“2025版”,也希望在这个过程中听到大家的意见和建议。
4+
5+
![](res/Python-Roadmap.png)
6+
7+
这里还有三个相关的学习路线图,分别是后端开发(Backend)、开发运维(DevOps)和数据科学(Data Science),后端开发的学习路线图如下所示,内容比较庞杂,核心的编程语言是 Java 或 Go。我个人不推荐大家用 Python 做后端开发,如果 Python 语言已经掌握得很好了,同时也具备了较多的计算机科学相关知识,可以尝试 AI 应用开发这个赛道,我相信你会有更多的收获。大家可以注意下用紫色勾选的项目,这些是作者推荐的选项,大部分也是我想推荐给后端开发者学习的内容。
8+
9+
![](res/Backend-Roadmap.png)
10+
11+
我们再看看开发运维的学习路线图,目前 DevOps 也是招聘市场的热门岗位,有兴趣的小伙伴可以关注下。
12+
13+
![](res/DevOps-Roadmap.png)
14+
15+
如果学过一些 Python 相关知识,想以此为基础转行做数据分析,可以看看下面这个学习路线图。需要说明的是,Python 仅仅是做数据分析的一个工具,要成为一个优秀的数据分析师需要有良好的数据思维,同时还要积累足够的业务知识,这样才能从数据中产生商业洞察,用数据优化产品、驱动业务,真正为决策提供强有力的支撑。
16+
17+
![](res/Data-Analyst-Roadmap.png)
18+
19+
最后,再次提醒大家,想打卡学习的一定记得在评论区给我留言!如果想**入坑数据科学**(数据分析、数据挖掘、数据治理等)也可以给我留言,今年应该会持续输出相关的内容。
20+
21+
![](res/modern-data-scientist.webp)

番外篇/我为什么选择了Python.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
## 我为什么选择了Python
22

3-
目前,Python语言的发展势头在国内国外都是不可阻挡的,Python凭借其简单优雅的语法,强大的生态圈从众多语言中脱颖而出,如今已经是稳坐编程语言排行榜前三的位置。国内很多Python开发者都是从Java开发者跨界过来的,我自己也不例外。我简单的跟大家交代一下,我为什么选择了Python
3+
目前,Python 语言的发展势头在国内国外都是不可阻挡的,Python 凭借其简单优雅的语法,强大的生态圈从众多语言中脱颖而出,如今已经是稳坐编程语言排行榜前三的位置。国内很多 Python 开发者都是从 Java 开发者跨界过来的,我自己也不例外。我简单的跟大家交代一下,我为什么选择了 Python
44

55
### Python vs. Java
66

7-
我们通过几个例子来比较一下,做同样的事情Java和Python的代码都是怎么写的
7+
我们通过几个例子来比较一下,做同样的事情 Java 和 Python 的代码都是怎么写的
88

99
例子1:在终端中输出“hello, world”。
1010

11-
Java代码
11+
Java 代码
1212

1313
```Java
1414
class Test {
@@ -19,15 +19,15 @@ class Test {
1919
}
2020
```
2121

22-
Python代码
22+
Python 代码
2323

2424
```Python
2525
print('hello, world')
2626
```
2727

2828
例子2:从1到100求和。
2929

30-
Java代码
30+
Java 代码
3131

3232
```Java
3333
class Test {
@@ -42,15 +42,15 @@ class Test {
4242
}
4343
```
4444

45-
Python代码
45+
Python 代码
4646

4747
```Python
4848
print(sum(range(1, 101)))
4949
```
5050

5151
例子3:双色球随机选号。
5252

53-
Java代码
53+
Java 代码
5454

5555
```Java
5656
import java.util.List;
@@ -93,7 +93,7 @@ class Test {
9393
}
9494
```
9595

96-
Python代码
96+
Python 代码
9797

9898
```Python
9999
from random import randint, sample

番外篇/玩转PyCharm.md

-79
This file was deleted.

番外篇/知乎问题回答.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## 知乎问题回答
22

3-
### Python学习完基础语法知识后,如何进一步提高?
3+
#### Python学习完基础语法知识后,如何进一步提高?
44

55
如果你已经完成了Python基础语法的学习,想要知道接下来如何提高,那么你得先问问自己你要用Python来做什么?目前学习Python后可能的就业方向包括以下几个领域,我把每个领域需要的技术作为了一个简单的关键词摘要。
66

番外篇/那些年我们踩过的那些坑.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ if __name__ == '__main__':
3838

3939
上面代码的部分运行结果如下图所示。这个结果是因为CPython出于性能优化的考虑,把频繁使用的整数对象用一个叫`small_ints`的对象池缓存起来造成的。`small_ints`缓存的整数值被设定为`[-5, 256]`这个区间,也就是说,如果使用CPython解释器,在任何引用这些整数的地方,都不需要重新创建`int`对象,而是直接引用缓存池中的对象。如果整数不在该范围内,那么即便两个整数的值相同,它们也是不同的对象。
4040

41-
![](./res/int-is-comparation.png)
41+
![](res/int-is-comparation.png)
4242

4343
当然仅仅如此这个坑就不值一提了,如果你理解了上面的规则,我们就再看看下面的代码。
4444

@@ -69,7 +69,7 @@ dis.dis(main)
6969

7070
代码的执行结果如下图所示。可以看出代码第6行和第7行,也就是`main`函数中的257是从同一个位置加载的,因此是同一个对象;而代码第9行的`a`明显是从不同的地方加载的,因此引用的是不同的对象。
7171

72-
![](./res/result-of-dis.png)
72+
![](res/result-of-dis.png)
7373

7474
如果还想对这个问题进行进一步深挖,推荐大家阅读[《Python整数对象实现原理》](https://foofish.net/python_int_implement.html)这篇文章。
7575

@@ -127,9 +127,9 @@ for row, name in enumerate(names):
127127

128128
如果对内存的使用不是很理解,可以看看[PythonTutor网站](http://www.pythontutor.com/)上提供的代码可视化执行功能,通过可视化执行,我们可以看到内存是如何分配的,从而避免在使用嵌套列表或者复制对象时可能遇到的坑。
129129

130-
![](./res/python-tutor-visualize.png)
130+
![](res/python-tutor-visualize.png)
131131

132-
![](./res/python-tutor-visualize2.png)
132+
![](res/python-tutor-visualize2.png)
133133

134134
### 坑3 - 访问修饰符的坑
135135

0 commit comments

Comments
 (0)