Skip to content

Commit b1bbe89

Browse files
committed
修改了部分文档
1 parent 601efd9 commit b1bbe89

File tree

3 files changed

+79
-24
lines changed

3 files changed

+79
-24
lines changed

PEP 8风格指南.md

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
11
## PEP 8风格指南
22

3-
PEP是Python Enhancement Proposal的缩写,通常翻译为“Python增强提案”。每个PEP都是一份为Python社区提供的指导Python往更好的方向发展的技术文档,其中的第8号增提案即PEP 8是针对Python语言编订的代码风格指南。尽管我们可以在保证语法没有问题的前提下随意书写Python代码,但是在实际开发中,采用一致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情,也是每个公司的编程规范中会提出的要求,这些在多人协作开发一个项目(团队开发)的时候显得尤为重要。我们可以从Python官方网站的[PEP 8链接](https://www.python.org/dev/peps/pep-0008/)中找到该文档,下面我们对该文档的关键部分做一个简单的总结。
3+
PEP是Python Enhancement Proposal的缩写,通常翻译为“Python增强提案”。每个PEP都是一份为Python社区提供的指导Python往更好的方向发展的技术文档,其中的第8号增强提案(PEP 8)是针对Python语言编订的代码风格指南。尽管我们可以在保证语法没有问题的前提下随意书写Python代码,但是在实际开发中,采用一致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情,也是每个公司的编程规范中会提出的要求,这些在多人协作开发一个项目(团队开发)的时候显得尤为重要。我们可以从Python官方网站的[PEP 8链接](https://www.python.org/dev/peps/pep-0008/)中找到该文档,下面我们对该文档的关键部分做一个简单的总结。
44

55
### 空格的使用
66

7-
1. **使用空格来表示缩进而不要用制表符(Tab)**这一点对习惯了其他编程语言的人来说简直觉得不可理喻,因为绝大多数的程序员都会用Tab来表示缩进,但是要知道Python并没有像C/C++或Java那样的用花括号来构造一个代码块的语法,在Python中分支和循环结构都使用缩进来表示哪些代码属于同一个级别,鉴于此Python代码对缩进以及缩进宽度的依赖比其他很多语言都强得多。在不同的编辑器中,Tab的宽度可能是2、4或8个字符,甚至是其他更离谱的值,用Tab来表示缩进对Python代码来说可能是一场灾难。
8-
2. **和语法相关的每一层缩进都用4个空格来表示。**
9-
3. **每行的字符数不要超过79个字符,如果表达式因太长而占据了多行,除了首行之外的其余各行都应该在正常的缩进宽度上再加上4个空格。**
10-
4. **函数和类的定义,代码前后都要用两个空行进行分隔。**
11-
5. **在同一个类中,各个方法之间应该用一个空行进行分隔。**
12-
6. **二元运算符的左右两侧应该保留一个空格,而且只要一个空格就好。**
7+
1. <u>使用空格来表示缩进而不要用制表符(Tab)。</u>这一点对习惯了其他编程语言的人来说简直觉得不可理喻,因为绝大多数的程序员都会用Tab来表示缩进,但是要知道Python并没有像C/C++或Java那样的用花括号来构造一个代码块的语法,在Python中分支和循环结构都使用缩进来表示哪些代码属于同一个级别,鉴于此Python代码对缩进以及缩进宽度的依赖比其他很多语言都强得多。在不同的编辑器中,Tab的宽度可能是2、4或8个字符,甚至是其他更离谱的值,用Tab来表示缩进对Python代码来说可能是一场灾难。
8+
2. <u>和语法相关的每一层缩进都用4个空格来表示。</u>
9+
3. <u>每行的字符数不要超过79个字符,如果表达式因太长而占据了多行,除了首行之外的其余各行都应该在正常的缩进宽度上再加上4个空格。</u>
10+
4. <u>函数和类的定义,代码前后都要用两个空行进行分隔。</u>
11+
5. <u>在同一个类中,各个方法之间应该用一个空行进行分隔。</u>
12+
6. <u>二元运算符的左右两侧应该保留一个空格,而且只要一个空格就好。</u>
1313

1414
### 标识符命名
1515

1616
PEP 8倡导用不同的命名风格来命名Python中不同的标识符,以便在阅读代码时能够通过标识符的名称来确定该标识符在Python中扮演了怎样的角色(在这一点上,Python自己的内置模块以及某些第三方模块都做得并不是很好)。
1717

18-
1. **变量、函数和属性应该使用小写字母来拼写,如果有多个单词就使用下划线进行连接。**
19-
2. **类中受保护的实例属性,应该以一个下划线开头。**
20-
3. **类中私有的实例属性,应该以两个下划线开头。**
21-
4. **类和异常的命名,应该每个单词首字母大写。**
22-
5. **模块级别的常量,应该采用全大写字母,如果有多个单词就用下划线进行连接。**
23-
6. **类的实例方法,应该把第一个参数命名为`self`以表示对象自身。**
24-
7. **类的类方法,应该把第一个参数命名为`cls`以表示该类自身。**
18+
1. <u>变量、函数和属性应该使用小写字母来拼写,如果有多个单词就使用下划线进行连接。</u>
19+
2. <u>类中受保护的实例属性,应该以一个下划线开头。</u>
20+
3. <u>类中私有的实例属性,应该以两个下划线开头。</u>
21+
4. <u>类和异常的命名,应该每个单词首字母大写。</u>
22+
5. <u>模块级别的常量,应该采用全大写字母,如果有多个单词就用下划线进行连接。</u>
23+
6. <u>类的实例方法,应该把第一个参数命名为`self`以表示对象自身。</u>
24+
7. <u>类的类方法,应该把第一个参数命名为`cls`以表示该类自身。</u>
2525

2626
### 表达式和语句
2727

2828
在Python之禅(可以使用`import this`查看)中有这么一句名言:“There should be one-- and preferably only one --obvious way to do it.”,翻译成中文是“做一件事应该有而且最好只有一种确切的做法”,这句话传达的思想在PEP 8中也是无处不在的。
2929

30-
1. **采用内联形式的否定词,而不要把否定词放在整个表达式的前面。**例如`if a is not b`就比`if not a is b`更容易让人理解。
31-
2. **不要用检查长度的方式来判断字符串、列表等是否为`None`或者没有元素,应该用`if not x`这样的写法来检查它。**
32-
3. **就算`if`分支、`for`循环、`except`异常捕获等中只有一行代码,也不要将代码和`if``for``except`等写在一起,分开写才会让代码更清晰。**
33-
4. **`import`语句总是放在文件开头的地方**
34-
5. **引入模块的时候,`from math import sqrt``import math`更好。**
35-
6. **如果有多个`import`语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。**
30+
1. <u>采用内联形式的否定词,而不要把否定词放在整个表达式的前面。</u>例如`if a is not b`就比`if not a is b`更容易让人理解。
31+
2. 不要用检查长度的方式来判断字符串、列表等是否为`None`或者没有元素,应该用`if not x`这样的写法来检查它。
32+
3. <u>就算`if`分支、`for`循环、`except`异常捕获等中只有一行代码,也不要将代码和`if``for``except`等写在一起,分开写才会让代码更清晰。</u>
33+
4. <u>`import`语句总是放在文件开头的地方。</u>
34+
5. <u>引入模块的时候,`from math import sqrt``import math`更好。</u>
35+
6. <u>如果有多个`import`语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。</u>
3636

Python惯例.md

+18
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@
55
1. 让代码既可以被导入又可以被执行。
66

77
```Python
8+
89
if __name__ == '__main__':
910
```
1011

1112

1213
2. 用下面的方式判断逻辑“真”或“假”。
1314

1415
```Python
16+
1517
if x:
1618
if not x:
1719
```
1820

1921
****的代码:
2022

2123
```Python
24+
2225
name = 'jackfrued'
2326
fruits = ['apple', 'orange', 'grape']
2427
owners = {'1001': '骆昊', '1002': '王大锤'}
@@ -29,6 +32,7 @@
2932
**不好**的代码:
3033

3134
```Python
35+
3236
name = 'jackfrued'
3337
fruits = ['apple', 'orange', 'grape']
3438
owners = {'1001': '骆昊', '1002': '王大锤'}
@@ -39,13 +43,15 @@
3943
3. 善于使用in运算符。
4044

4145
```Python
46+
4247
if x in items: # 包含
4348
for x in items: # 迭代
4449
```
4550

4651
****的代码:
4752

4853
```Python
54+
4955
name = 'Hao LUO'
5056
if 'L' in name:
5157
print('The name has an L in it.')
@@ -54,6 +60,7 @@
5460
**不好**的代码:
5561

5662
```Python
63+
5764
name = 'Hao LUO'
5865
if name.find('L') != -1:
5966
print('This name has an L in it!')
@@ -62,6 +69,7 @@
6269
4. 不使用临时变量交换两个值。
6370

6471
```Python
72+
6573
a, b = b, a
6674
```
6775

@@ -70,6 +78,7 @@
7078
****的代码:
7179

7280
```Python
81+
7382
chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
7483
name = ''.join(chars)
7584
print(name) # jackfrued
@@ -78,6 +87,7 @@
7887
**不好**的代码:
7988

8089
```Python
90+
8191
chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
8292
name = ''
8393
for char in chars:
@@ -94,6 +104,7 @@
94104
****的代码:
95105

96106
```Python
107+
97108
d = {'x': '5'}
98109
try:
99110
value = int(d['x'])
@@ -105,6 +116,7 @@
105116
**不好**的代码:
106117

107118
```Python
119+
108120
d = {'x': '5'}
109121
if 'x' in d and isinstance(d['x'], str) \
110122
and d['x'].isdigit():
@@ -119,6 +131,7 @@
119131
****的代码:
120132

121133
```Python
134+
122135
fruits = ['orange', 'grape', 'pitaya', 'blueberry']
123136
for index, fruit in enumerate(fruits):
124137
print(index, ':', fruit)
@@ -127,6 +140,7 @@
127140
**不好**的代码:
128141

129142
```Python
143+
130144
fruits = ['orange', 'grape', 'pitaya', 'blueberry']
131145
index = 0
132146
for fruit in fruits:
@@ -139,6 +153,7 @@
139153
****的代码:
140154

141155
```Python
156+
142157
data = [7, 20, 3, 15, 11]
143158
result = [num * 3 for num in data if num > 10]
144159
print(result) # [60, 45, 33]
@@ -147,6 +162,7 @@
147162
**不好**的代码:
148163

149164
```Python
165+
150166
data = [7, 20, 3, 15, 11]
151167
result = []
152168
for i in data:
@@ -160,6 +176,7 @@
160176
****的代码:
161177

162178
```Python
179+
163180
keys = ['1001', '1002', '1003']
164181
values = ['骆昊', '王大锤', '白元芳']
165182
d = dict(zip(keys, values))
@@ -169,6 +186,7 @@
169186
**不好**的代码:
170187

171188
```Python
189+
172190
keys = ['1001', '1002', '1003']
173191
values = ['骆昊', '王大锤', '白元芳']
174192
d = {}

README.md

+41-4
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@
8686
- 函数的作用 - 代码的坏味道 / 用函数封装功能模块
8787
- 定义函数 - def语句 / 函数名 / 参数列表 / return语句 / 调用自定义函数
8888
- 调用函数 - Python内置函数 / 导入模块和函数
89-
- 函数的参数 - 默认参数 / 可变参数 / 关键字参数(\*) / 命名关键字参数(\*)
90-
- 函数的返回值 - 没有返回值 / 返回单个值 / 返回多个值(\*)
89+
- 函数的参数 - 默认参数 / 可变参数 / 关键字参数 / 命名关键字参数
90+
- 函数的返回值 - 没有返回值 / 返回单个值 / 返回多个值
9191
- 作用域问题 - 局部作用域 / 嵌套作用域 / 全局作用域 / 内置作用域 / 和作用域相关的关键字
9292
- 用模块管理函数 - 模块的概念 / 用自定义模块管理函数 / 命名冲突的时候会怎样(同一个模块和不同的模块)
9393

@@ -208,22 +208,40 @@
208208

209209
#### Day41 - [快速上手](./Day41-55/01.快速上手.md)
210210

211+
212+
211213
#### Day42 - [深入模型](./Day41-55/02.深入模型.md)
212214

215+
216+
213217
#### Day43 - [静态资源和Ajax请求](./Day41-55/03.静态资源和Ajax请求.md)
214218

219+
220+
215221
#### Day44 - [表单的应用](./Day41-55/04.表单的应用.md)
216222

223+
224+
217225
#### Day45 - [Cookie和会话](./Day41-55/05.Cookie和会话.md)
218226

227+
228+
219229
#### Day46 - [中间件的应用](./Day41-55/06.中间件的应用.md)
220230

231+
232+
221233
#### Day47 - [日志和缓存](./Day41-55/07.日志和缓存.md)
222234

235+
236+
223237
#### Day48 - [文件上传](./Day41-55/08.文件上传.md)
224238

239+
240+
225241
#### Day49-50 - [RESTful架构和应用](./Day41-55/09-10.RESTful架构和应用.md)
226242

243+
244+
227245
#### Day51-55 - [项目实战](./Day41-55/11-15.项目实战.md)
228246

229247
- 项目开发流程和相关工具
@@ -237,18 +255,27 @@
237255

238256
#### Day56 - [安装和入门](./Day56-65/01.安装和入门.md)
239257

258+
259+
240260
#### Day57 - [模板的使用](./Day56-65/02.模板的使用.md)
241261

262+
263+
242264
#### Day58 - [表单的处理](./Day56-65/03.表单的处理.md)
243265

266+
267+
244268
#### Day59 - [数据库操作](./Day56-65/04.数据库操作.md)
245269

270+
271+
246272
#### Day60 - [项目结构](./Day56-65/05.项目结构.md)
247273

274+
275+
248276
#### Day61-65 - [项目实战](./Day56-65/06-10.项目实战.md)
249277

250-
- 性能和测试
251-
- 项目部署
278+
252279

253280
### Day66~75 - [爬虫开发](./Day66-75)
254281

@@ -304,14 +331,24 @@
304331

305332
#### Day91 - [过程模型和团队开发工具](./Day91-100/过程模型和团队开发工具.md)
306333

334+
335+
307336
#### Day92 - [模块分割与单元测试](./Day91-100/模块分割与单元测试.md)
308337

338+
339+
309340
#### Day93~Day97 - [开发中的常见问题](./Day91-100/开发中的常见问题.md)
310341

342+
343+
311344
#### Day98 - [持续集成](./Day91-100/持续集成.md)
312345

346+
347+
313348
#### Day99 - [项目部署和安全性措施](./Day91-100/项目部署和安全性措施.md)
314349

350+
351+
315352
#### Day100 - [性能测试和性能调优](./Day91-100/性能测试和性能调优.md)
316353

317354

0 commit comments

Comments
 (0)