Skip to content

Commit 2c5bc55

Browse files
author
王炳明
committed
更新
1 parent 828c52d commit 2c5bc55

15 files changed

Lines changed: 157 additions & 104 deletions

File tree

source/c01/c01_01.md

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,11 @@
22

33
![](http://image.iswbm.com/20200602135014.png)
44

5-
---
5+
## 0. 去哪里找
66

7-
从今天开始,小明将和你一起过一下,那些在面试「Python开发」岗位时面试官喜欢问的问题。内容基础,但是你不一定会噢
7+
这块的内容,你随便使用搜索引擎都可以查到
88

9-
这些问题全部来自个人经验,群友推荐以及网络上的帖子。如果你有好的问题,也可以随时向我提出(不要觉得简单),我会筛选后整理出来在这里,供大家学习取经,给大家在求职路上贡献一份力。
10-
11-
开篇讲些什么好呢?
12-
13-
今天就来罗列一下,Python2.x和3.x到底有哪些区别吧。
14-
15-
## 去哪里找
16-
17-
你随便全使用搜索引擎都可以查到这些资料,但是大家说的都是一些普遍都知道的事儿。或者都是抄来抄去,内容相差无几。
9+
但是大家好像都在抄来抄去,内容相差无几。
1810

1911
授人以鱼,不如授人以渔。
2012

@@ -34,7 +26,7 @@
3426
接下来。和大家一起过一下,Python2.x和3.x到底有哪些区别,这不仅在你开发过程中需要考虑的,也是面试过程面试官经常会问及的。
3527

3628

37-
## 1.1.1 print
29+
## 1. print
3830

3931
在Python 2.6之前,只支持
4032
```
@@ -52,7 +44,7 @@ print("hello")
5244
print ("hello")
5345
```
5446

55-
## 1.1.2 编码方式
47+
## 2. 编码方式
5648

5749
在Python2.x中,默认使用`ASCII`编码。
5850

@@ -76,7 +68,7 @@ print str1
7668

7769
所以我们可以在程序中,随意的使用中文(但并不推荐),不会报错。
7870

79-
## 1.2.3 除法运算
71+
## 3. 除法运算
8072

8173
Python 2.x中除法运算,整数间运算只保留整数(向下取整)。
8274
```python
@@ -108,7 +100,7 @@ Python 3.x中除法运算,全部保留小数(即使能被整除)。
108100
-3.0
109101
```
110102

111-
## 1.2.4 异常捕获
103+
## 4. 异常捕获
112104

113105
在 Python 3 中,只能使用 `as` 作为关键词。而在Python 2中经常使用 `except Exception, e`
114106
使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。
@@ -120,7 +112,7 @@ Python 2.6已经支持这两种语法。
120112

121113
在2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。
122114

123-
## 1.2.5 xrange
115+
## 5. xrange
124116

125117
首先,要了解的是,xrange是只有在Python2.x中才有的产物。
126118

@@ -139,7 +131,7 @@ xrange(1, 5)
139131
range(0, 10)
140132
```
141133

142-
## 1.2.6 用户输入
134+
## 6. 用户输入
143135

144136
在2.x 中,有两个函数。raw_input()和input()。
145137
- raw_input():将所有输入作为字符串看待,返回字符串类型。
@@ -148,7 +140,7 @@ range(0, 10)
148140
在3.x 中,对这两个函数进行整合,只留下一个`input()`,既可输入数字,也可输入字符串,返回的是字符串类型。
149141

150142

151-
## 1.2.7 数据类型
143+
## 7. 数据类型
152144

153145
Python 3.x 一个很重要的特性是,对字符串和二进制数据流做了明确的区分。
154146

@@ -160,7 +152,7 @@ Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符
160152

161153
还有一点是,3.X去除了long类型,取代它的是整型(int)。3.x的整型是没有限制大小的,可以当做long类型使用, 但实际上由于机器内存的有限,我们使用的整数是不可能无限大的。
162154

163-
## 1.2.8 函数式编程
155+
## 8. 函数式编程
164156

165157
在Python中,我们常常使用到的map,filter,reduce,在2.x和3.x中也有所不同。
166158

@@ -195,13 +187,13 @@ Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符
195187
```
196188
对于 reduce 函数,它在 Python 3.x 中已经不属于 built-in 了,被挪到 functools 模块当中。
197189

198-
## 1.2.9 协程关键字
190+
## 9. 协程关键字
199191

200192
在Python3.3后,协程中,新增了yield from 和 async/await 关键字,这在2.x中是没有。
201193

202194
关于yield from的语法剖析,可以前往查看我的另一篇文章。
203195

204-
## 1.2.10 类的类型
196+
## 10. 类的类型
205197

206198
Python2.x 默认使用经典类,只有显示继承object才是新式类。
207199

@@ -217,7 +209,7 @@ class Cls(object):
217209
pass
218210
```
219211

220-
## 1.2.11 变量作用域
212+
## 11. 变量作用域
221213

222214
- 在2.x中无法将局部变量声明为全局变量。
223215
- 在3.x中可以使用nonlocal语法将局部变量声明为全局变量。
@@ -236,7 +228,7 @@ foo()
236228
# 3.x输出:200
237229
```
238230

239-
## 1.2.12 元类的使用
231+
## 12. 元类的使用
240232

241233
在2.x 中
242234
```python
@@ -257,17 +249,17 @@ class Person(metaclass=MetaPerson):
257249
pass
258250
```
259251

260-
## 1.2.13 模块变化
252+
## 13. 模块变化
261253

262254
- 去掉了一些模块。由于不常用,这里就不列举了。
263255
- 新增了一些模块。比如:concurrent.futures,asyncio等
264256
- 修改了一些模块。比如:Queue改成queue。
265257

266258
----
267259

268-
大概就是这些内容,可能还有更细微的差别,这些内容要前往官网查看。但是那些对于我们普通开发者来说,并不那么重要。完全可以不去关注。
260+
大概就是这些内容,可能还有更细微的差别,这些内容要前往官网查看。
269261

270-
实际上,当我熟悉一个版本后,基本上是可以无缝过渡到另一个版本的。这篇文章,更多的是为了科普和应对面试
262+
但是那些对于我们普通开发者来说,并不那么重要,个人感觉可以不去关注
271263

272264
----
273265

source/c01/c01_02.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ True
156156

157157

158158

159-
## 模块(Modules)
159+
## 3. 模块(Modules)
160160

161161
### \__doc__
162162

@@ -196,7 +196,7 @@ True
196196

197197

198198

199-
## 类(Class)
199+
## 4. 类(Class)
200200

201201
### \__doc__
202202

@@ -276,6 +276,4 @@ mappingproxy({'__module__': '__main__', '__doc__': '\n people class\n ', '
276276

277277

278278

279-
##
280-
281279
![](http://image.iswbm.com/20200607174235.png)

source/c01/c01_05.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
---
66

7-
## 1.5.1 作用域
7+
## 1. 作用域
88

99
Python的作用域可以分为四种:
1010
- L (Local) 局部作用域
@@ -54,7 +54,7 @@ print(name)
5454
```
5555

5656

57-
## 1.5.2 闭包
57+
## 2. 闭包
5858

5959
闭包这个概念很重要噢。你一定要掌握。
6060
>在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。其实装饰函数,很多都是闭包。
@@ -77,7 +77,7 @@ deco()()
7777
# 输出:MING
7878
```
7979

80-
## 1.5.3 改变作用域
80+
## 3. 改变作用域
8181

8282
变量的作用域,与其定义(或赋值)的位置有关,但不是绝对相关。
8383
因为我们可以在某种程度上去改变`向上`的作用范围。
@@ -129,7 +129,7 @@ deco()()
129129
```
130130

131131

132-
## 1.5.4 变量集合
132+
## 4. 变量集合
133133

134134
在Python中,有两个内建函数,你可能用不到,但是需要掌握它们。
135135
- globals() :以dict的方式存储所有全局变量

source/c01/c01_06.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Python中有一个基础的数据结构,叫做元组(tuple),但是一般
1010

1111
以下两点,第一点是大家所熟知的,而第二点可能只有老司机才会知道,只有学习了第二点,才算真正理解了元组存在的价值和意义。
1212

13-
## 2.6.1 不可变列表
13+
## 1. 不可变列表
1414

1515
这是`元组`区别于`列表`最显著的特征。
1616

@@ -54,7 +54,7 @@ s1*n
5454
```
5555

5656

57-
## 2.6.2 具名元组
57+
## 2. 具名元组
5858

5959
这个特性,我个人认为,才是元组存在的意义所在。
6060

source/c01/c01_09.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010

11-
## 1.9.1 认识Mixin模式
11+
## 1. 认识Mixin模式
1212

1313
那我们今天就来讲讲这个 Mixin,对于这个Mixin,如何理解?它其实是一种设计模式,如果开发者之间没有产生这样一种设计模式的共识,那么设计模式将不复存在。
1414

@@ -44,7 +44,7 @@ class Airplane(Vehicle, PlaneMixin):
4444

4545

4646

47-
## 1.9.2 不使用Mixin的弊端
47+
## 2. 不使用Mixin的弊端
4848

4949
你肯定会问,不使用 Mixin 行吗?
5050

source/c01/c01_11.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
---
66

7-
## 一、正则表达式先导
7+
## 1. 正则表达式先导
88

99
### 1.1 正则基础知识
1010

@@ -72,7 +72,7 @@ re_match.group(2)
7272
`{n,m}?` :重复n到m次,但尽可能少重复
7373
`{n,}?`: 重复n次以上,但尽可能少重复
7474

75-
## 二、Python中的正则
75+
## 2. Python中的正则
7676

7777
在Python中,自带了re模块,这是专门用来做正则表达式的匹配的。
7878

@@ -176,7 +176,7 @@ match.span()
176176
(0, 3)
177177
```
178178

179-
## 三、检验表达式
179+
## 3. 检验表达式
180180
### 3.1 校验数字
181181
```
182182
1. 数字:^[0-9]*$

source/c01/c01_12.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
初学计算机的人,肯定对众多字符编码感到头疼。为什么会那么多字符串编码? 这些内容是在去年整理的,现在重新整理下,发布在博客,搞懂字符串编码,这一篇文章足矣
88

9-
## 1.12.1 前言必知
9+
## 1. 前言必知
1010

1111
初学计算机的人,肯定对众多字符编码感到头疼。为什么会那么多字符串编码?
1212

@@ -15,7 +15,7 @@
1515
bit,位,一个bit可以表示两个数字,0和1
1616
byte,字节,一个byte由8个bit表示,一个byte表示的数字区间[0,255]
1717

18-
## 1.12.2 ASCII编码
18+
## 2. ASCII编码
1919

2020
### 原始ASCII编码
2121

@@ -31,7 +31,7 @@ byte,字节,一个byte由8个bit表示,一个byte表示的数字区间[0,2
3131

3232
![原始ASCII编码](https://ooo.0o0.ooo/2017/08/02/59815bd96dd8a.gif)
3333

34-
## 1.12.3 ANSI标准
34+
## 3. ANSI标准
3535
>ANSI:美国国家标准学会(AMERICAN NATIONAL STANDARDS INSTITUTE)
3636
3737
随着计算机的全世界普及,世界各国都用的上计算机了。但是每个国家都有各自的语言,而传统的计算机只支持ASCII编码表的字符。这对于不以英语为母语的人来说,使用计算机是非常吃力的。为了解决这个问题,各个国家的人都出了一套收录自己文字的字符编码(当然包含了ASCII里所有字符)。
@@ -48,7 +48,7 @@ byte,字节,一个byte由8个bit表示,一个byte表示的数字区间[0,2
4848
* 在日文Windows中,ANSI编码是`Shift_JIS`
4949
* ...
5050

51-
## 1.12.4 Unicode编码
51+
## 4. Unicode编码
5252

5353
上节讲到各国都有了自己的编码,已经可以正常使用电脑了。
5454
但是随着国际交流的日益频繁和迫切需要,我们中国人也要和美国人进行信息交流,美国人还要和日本人进行信息交流。假设,我们把一篇中文论文发到网上,美国人在用自己的计算机查看这个网页的时候,由于本地计算机不支持GB2312,结果无法显示正确信息,或者乱码。你会说,那很简单啊,让美国人在电脑上装上GB2312编码不就OK。真的OK吗?世界上那么多国家,那么多语言,那么多ANSI编码,都装上是不是要疯了。好吧,假如你真的不厌其烦的装上了,再假设,有一个中国人,他不仅会说汉语,还会说日语。他发表了一篇既有汉语也有日文的文章,而美国人在看这篇文章的时候,是用GB2312来解码呢,还是用Shift_JIS来解码呢?无论用哪个解码都会出现乱码的情况。
@@ -61,7 +61,7 @@ Unicode是由统一码联盟(英语:The Unicode Consortium),一个统筹
6161

6262
Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2017年6月20日公布的10.0.0,已经收入超过十万个字符(第十万个字符在2005年获采纳)。[Unicode-维基百科](https://zh.wikipedia.org/wiki/Unicode)
6363

64-
## 1.12.5 UTF-8编码
64+
## 5. UTF-8编码
6565

6666
到目前为止,世界各国人民,都能愉快的无语言障碍的使用计算机了。
6767
但是随着信息化时代的来临,人们越来越追求资源的传输速度和硬盘的存储效率。
@@ -85,7 +85,7 @@ UTF-8(UTF:Unicode TransferFormat,即把Unicode转做某种格式的意思)
8585
当在txt输入输入'联通',保存再次打开就乱码,输入'你好联通'就不会出现这个情况。
8686
![](https://i.loli.net/2017/08/02/59816d652aeb9.png)
8787

88-
## 1.12.6 编码之于Python
88+
## 6. 编码之于Python
8989

9090
**Python2**
9191
Python2默认是使用ASCII编码,这也是出现编码问题的罪魁祸首。但这也不怪Python,在Python诞生的时候,Unicode还没出现。
@@ -113,7 +113,7 @@ print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
113113
在Python3中,已经默认使用Unicode编码了。解决了很多编码的问题。
114114
如果py文件中,含有中文还是得在文件头出加入 `# coding=utf-8`
115115

116-
## 1.12.7 扩展阅读
116+
## 7. 扩展阅读
117117

118118
中文编码的发展
119119
GB2312-> GBK -> GB18030

source/c01/c01_13.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
---
66

7-
## 1.13.1 lambda 表达式
7+
## 1. lambda 表达式
88

99
匿名函数(英语:anonymous function)是指一类无需定义标识符(函数名)的函数。通俗来说呢,就是它可以让我们的函数,可以不需要函数名。
1010

@@ -51,7 +51,7 @@ mySum(2, 3)
5151

5252
首先我们要知道 lambda 是一个表达式,而不是一个语句。正因为这个特点,我们可以在一些特殊的场景中去使用它。具体是什么场景呢?接下来我们会介绍到几个非常好用的内置函数。
5353

54-
## 1.13.2 map 函数
54+
## 2. map 函数
5555

5656
map 函数,它接收两个参数,第一个参数是一个函数对象(当然也可以是一个lambda表达式),第二个参数是一个序列。
5757

@@ -69,7 +69,7 @@ for i in [1,2,3,4,5]:
6969
mylist.append(i*2)
7070
```
7171

72-
## 1.13.3 filter 函数
72+
## 3. filter 函数
7373

7474
filter 函数,和 map 函数相似。同样也是接收两个参数,一个lambda 表达式,一个序列。它会遍历后面序列中每一个元素,并将其做为参数传入lambda表达式中,当表达式返回 True,则元素会被保留下来,当表达式返回 False ,则元素会被丢弃。
7575

@@ -79,12 +79,14 @@ filter 函数,和 map 函数相似。同样也是接收两个参数,一个la
7979
[-5, -4, -3, -2, -1]
8080
```
8181

82-
## 1.13.4 reduce 函数
82+
## 4. reduce 函数
8383

8484
reduce 函数,也是类似的。它的作用是先对序列中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 lambda 函数运算,将其得到的结果再与第四个元素进行运算,以此类推下去直到后面没有元素了。
8585

86-
![reduce 逻辑演示](https://ws1.sinaimg.cn/large/8f640247gy1fyx6i8q3anj208c04u3yu.jpg)
86+
![](http://image.iswbm.com/20200930175131.png)
87+
8788
这边举个例子你也就明白了。
89+
8890
```
8991
>>>reduce(lambda x,y: x+y, [1,2,3,4,5])
9092
15
@@ -97,7 +99,7 @@ reduce 函数,也是类似的。它的作用是先对序列中的第 1、2 个
9799
10+5=15
98100
```
99101

100-
## 1.13.5 注意点
102+
## 5. 注意点
101103

102104
以上几个函数,熟练的掌握它们的写法,可以让我们的代码看起来更加的 Pythonic ,在某一程度上代码看起来更加的简洁。
103105

0 commit comments

Comments
 (0)