pep8除了是一个标准,也是一个软件包的名字。
提供一个pep8检测器。
运行很简单:pep8 INPUT_FILES ...
查看帮助:pep8 --help
一般来说,如果要检查代码,pylint和pep8最好都运行一下。pep8只能检测格式,pylint不仅检测格式,还检测语意。
下文参考总结bobo的日记,感谢前辈分享~~~
一 代码编排¶
1 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。python3 已经不允许空格和Tab混用了。
2 每行最大长度79,换行可以使用反斜杠。换行点要在操作符的后边敲回车。
with open('/path/to/some/file/you/want/to/read') as file_1, \
open('/path/to/some/file/being/written', 'w') as file_2:
file_2.write(file_1.read())
3 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
4 和括号开始的部分对齐:
foo = long_function_name(var_one, var_two,
var_three, var_four)
#需要更多一层的缩进
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
## 千万不能与下一个代码行对齐。。。。
5 在闭合的括号中不要加空格
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
二 文档编排¶
1 模块内容的顺序:模块说明和docstring—import—globals&constants(静态或全局变量)—其他定义。
使用绝对路径import,不用import * ,可能会导入到名字相同的冲突的包
包含顺序也有讲究,顺序如下(他们之间最好加一个换行):
* 标准库
* 第三方库
* 本地的应用或者库
2 不要在一句import中多个库,比如import os, sys不推荐。
3 如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。
三 空格的使用¶
总体原则,避免不必要的空格。
1 各种右括号前不要加空格。
2 逗号、冒号、分号前不要加空格。
Yes: if x == 4: print x, y; x, y = y, x
No: if x == 4 : print x , y ; x , y = y , x
3 函数的左括号前不要加空格。如Func(1)。序列的左括号前不要加空格。如list[2]。
4 不要为了对齐增加空格。
5 操作符左右各加一个空格.
6 缺省值等号两边无空格:
def connect(self, user=None):
self._user = user
7 不要将多句语句写在同一行,尽管使用‘;’允许。
8 if/for/while语句中,即使执行语句只有一句,也必须另起一行。
四 注释¶
总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。
如果是短语,可以省略结束符。
1 块注释,在一段代码前增加的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔。比如:
# Description : Module config.
#
# Input : None
#
# Output : None
2 行注释,在一句代码后加注释。比如:x = x + 1 # Increment x
但是这种方式尽量少使用。
3 避免无谓的注释。
五 命名规范¶
1 常量 : 大写加下划线
STATUS = {
0: u'正常',
1: u'草稿',
2: u'删除',
}
# 加下划线
POST_STATUS = {
0: u'正常',
1: u'草稿',
2: u'删除',
}
2 类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写。类名应该简明,精确.
class UserProfile(BaseProfile):
def __init__(self, profile):
return self._profile = profile
def profile(self):
return self._profile
3 模块和包.除特殊模块 init 之外,模块名称都使用不带下划线的小写字母。
若是它们实现一个协议,那么通常使用lib为后缀,例如:
import smtplib
import os
import sys
分行包含:¶
Yes: import os
import sys
No: import sys, os
下面的也可以:¶
from subprocess import Popen, PIPE
4 使用 has 或 is 前缀命名布尔元素
is_connect = True
has_member = False
5 用复数形式命名序列
members = ['user_1', 'user_2']
6 避免通用名称,避免现有名称
诸如 list, dict, sequence 或者 element 这样的名称应该避免
诸如 os, sys 这种系统已经存在的名称应该避免。
7 异常名:加入后缀Error
8 函数名:小写+下划线
9 函数和方法的参数:实例使用self 开始,类使用cls 开始。如果和系统参数名重复,在其后加_
六 验证脚本¶
可以安装一个 pep8 脚本用于验证你的代码风格是否符合 PEP8。
pip install pep8
pip install --upgrade pep8
pip uninstall pep8
Example usage and output
$ pep8 --first optparse.py
# 也可以传一个文件夹,pep8 --first apps/
optparse.py:69:11: E401 multiple imports on one line
optparse.py:77:1: E302 expected 2 blank lines, found 1
optparse.py:88:5: E301 expected 1 blank line, found 0
optparse.py:222:34: W602 deprecated form of raising exception
optparse.py:347:31: E211 whitespace before '('
optparse.py:357:17: E201 whitespace after '{'
optparse.py:472:29: E221 multiple spaces before operator
optparse.py:544:21: W601 .has_key() is deprecated, use 'in'
You can also make pep8.py show the source code for each error, and even the relevant text from PEP 8:
$ pep8 --show-source --show-pep8 testsuite/E40.py
testsuite/E40.py:2:10: E401 multiple imports on one line
import os, sys
^
Imports should usually be on separate lines.
Okay: import os\nimport sys
E401: import sys, os
你也可以装上sublime2插件AutoPEP8
,右键即可规范代码¶
AutoPEP8:
--------
Sublime Auto PEP8 Formatting
(https://github.com/wistful/SublimeAutoPEP8)
Automatically formats Python code to conform to the PEP 8 style guide using autopep8 module
Support ST2 and ST3
Features:
format / preview code according PEP8
format / preview selected text
format / preview all python modules in folder
side bar menu
formated code while saving
Using:
SideBar - right click on the file(s) or folder(s)
Active view - right click on the view
Selected text - right click on the selected text
On Save - provide by settings: option format_on_save
Command Palette - bring up the Command Palette and select `PEP8: Format Code` or `PEP8: Preview Changes`
Hotkeys - `Command/Control + Shift + 8` to format code, `Command/Control + 8` to preview changes
七 源码文件的编码¶
python2 默认ASCII ,python3 默认utf8
都用utf8省事