PEP8 经常使用规范
完整的规范移步这里两个传送门
pep8规范 官方文档:https://www.python.org/dev/peps/pep-0008/html
我的使用中经常使用的规范
1、代码编排
1 缩进。4个空格的缩进(编辑器均可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
2 每行最大长度79,换行可使用反斜杠,最好使用圆括号。换行点要在操做符的后边敲回车。
3 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其余地方尽可能不要再空行。
2、文档编排
1 模块内容的顺序:模块说明和docstring—import—globals&constants—其余定义。其中import部分,又按标准、三方和本身编写顺序依次排放,之间空一行。
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # @Time : 2018/05/17 10:46
4 # @Author : MJay_Lee
5 # @File : tcp_server.py
6 # @Contact : limengjiejj@hotmail.com
7
8 import os
9 import sys
10
11 from tcp_server import online_user
12 from threading import currentThread
13 from lib import common
14
15 from interface import common_interface, admin_interface, user_interface
16
17 conn_pool = ThreadPoolExecutor(10)
18 # 互斥锁为了限制多个线程同时登陆一个ID时进行写操做带来的误区
19 mutex = Lock()
20 # 之因此把mutex放在online_user.py文件中,是由于避免文件的交叉引用
21 online_user.mutex = mutex
22
23 def foo1
24
25
26 def foo2
2 不要在一句import中多个库,好比import os, sys不推荐。
# 正确方式
import os
import sys
from subprocess import Popen, PIPE
# 错误方式
import os,sys
3 若是采用from XX import XX引用库,能够省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。
from myclass import MyClass
from foo.bar.yourclass import YourClass
# 若是和本地名字有冲突:
import myclass
import foo.bar.yourclass
3、空行的使用
整体原则,避免没必要要的空格。
1 各类右括号前不要加空格。
2 逗号、冒号、分号
前不要加空格。
3 函数的左括号
前不要加空格。如Func(1)。
4 序列的左括号
前不要加空格。如list[2]。
5
操做符左右各加一个空格,不要为了对齐增长空格。
6
函数默认参数使用的赋值符左右
省略空格。
7 不要将多句语句写在同一行,尽管使用‘;’容许。
8 i
f/for/while语句中,即便执行语句只有一句,也必须另起一行。
4、注释
整体原则,英文,简明。
- 与代码自相矛盾的注释比没注释更差。修改代码时要优先更新注释!
- 注释是完整的句子。若是注释是断句,首字母应该大写,除非它是小写字母开头的标识符(永远不要修改标识符的大小写)。
- 若是注释很短,能够省略末尾的句号。注释块一般由一个或多个段落组成。段落由完整的句子构成且每一个句子应该以点号(后面要有两个空格)结束,并注意断词和空格。
- 非英语国家的程序员请用英语书写你的注释,除非你120%确信代码永远不会被不懂你的语言的人阅读。
- 注释块一般应用在代码前,并和这些代码有一样的缩进。每行以 '# '(除非它是注释内的缩进文本,注意#后面有空格)。注释块内的段落用仅包含单个 '#' 的行分割。
- 慎用行内注释(Inline Comments) 节俭使用行内注释。 行内注释是和语句在同一行,至少用两个空格和语句分开。行内注释不是必需的,重复罗嗦会令人分心。不要这样作:
-
# 正确写法
x = x + 1 # Compensate for border
# 错误写法
x = x + 1 # do nothing
5、命名
整体原则,新编代码必须按下面命名风格进行,现有库的编码尽可能保持风格。
- b(单个小写字母)
- B(单个大写字母)
- lowercase(小写串)
- lower_case_with_underscores(带下划线的小写)
- UPPERCASE(大写串)
- UPPER_CASE_WITH_UNDERSCORES(带下划线的大写串)
- CapitalizedWords(首字母大写的单词串或驼峰缩写)
- 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
- mixedCase(混合大小写,第一个单词是小写)
- Capitalized_Words_With_Underscores(带下划线,首字母大写,丑陋)
六 、编码建议
1 编码中考虑到其余python实现的效率等问题,好比运算符‘+’在CPython(Python)中效率很高,都是Jython中却很是低,因此应该采用.join()的方式。
2 尽量使用‘is’‘is not’取代‘==’,好比if x is not None 要优于if x。
3 使用基于类的异常,每一个模块或包都有本身的异常类,此异常类继承自Exception。
4 异常中不要使用裸露的except,except后跟具体的exceptions。
5 异常中try的代码尽量少。好比:
try:
value = collection[key]
except KeyError:
return key_not_found(key)
else:
return handle_value(value)
要优于
try:
return handle_value(collection[key])
except KeyError:
# Will also catch KeyError raised by handle_value()
return key_not_found(key)
6 使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。好比:
Yes: if foo.startswith('bar'):优于
No: if foo[:3] == 'bar':
7 使用isinstance()比较对象的类型。好比
Yes: if isinstance(obj, int): 优于
No: if type(obj) is type(1):
8 判断序列空或不空,有以下规则
优于
No: if len(seq)
if not len(seq)
9 字符串不要以空格收尾。
10 二进制数据判断使用 if boolvalue的方式。
(完)