PEP 8 Python 编码风格指南概要

Python 拥有简洁优雅的语法,但这并不意味着开发者一定能写出简洁而优雅的代码。要写出好的代码,就要遵循一定的规则。Python 官方给出了 PEP8 风格指南,建议每位 Python 开发者都应该阅读一遍,并在开发过程中遵循该编程规范。

PEP 8 全称为 Python Enhancement Proposal #8 , 中文叫做《8号Python增强提案》。PEP 8 中列出了很多编程的细节,认真实践有助于养成良好的编程习惯。

PEP 8 官方文档:PEP 8 -- Style Guide for Python Code

PEP 8 概要

下面列出 PEP 8 中提到的,并且每位 Python 开发者都应该遵循的基本要求,段落摘自 Effective Python 中文译本。

空白

Python 中的空白(whitespace)会影响代码的含义。 Python 程序员使用空白的时候尤其在意,因为它们还会影响代码的清晰程度。

  • 使用 space(空格)来表示缩进,而不要用 tab(制表符)。
  • 和语法相关的每一层缩进都用 4 个空格来表示。
  • 每行的字符数不应超过 79。
  • 对于占据多行的长表达式来说,除了首行之外的其余各行都应该在通常的缩进级别之上再加 4 个空格。
  • 文件中的函数与类之间应该用两个空行隔开。
  • 在同一个类中,各方法之间应该用一个空行隔开。
  • 在使用下标来获取列表元素、调用函数或给关键字参数赋值的时候,不要在两旁添加空格。
  • 为变量赋值的时候,赋值符号的左侧和右侧应该各自写上一个空格,而且只写一个就好。

命名

PEP 8 提倡采用不同的命名风格来编写 Python 代码中的各个部分,以便在阅读代码时可以根据这些名称看出它们在 Python 语言中的角色。

  • 函数、变量及属性应该用小写字母来拼写,各单词之间以下划线相连,例如,lowercase_underscore。
  • 受保护的实例属性,应该以单个下划线开头,例如, _leading_underscore。
  • 私有的实例属性,应该以两个下划线开头,例如, __double_leading_underscore。
  • 类与异常,应该以每个单词首字母均大写的形式来命名,例如, CapitalizedWord。
  • 模块级别的常量,应该全部采用大写字母来拼写,各单词之间以下划线相连,例如, ALL_CAPS。
  • 类中的实例方法(instance method),应该把首个参数命名为 self,以表示该对象自身。
  • 类方法(class method)的首个参数,应该命名为 cls,以表示该类自身。

表达式和语句

《The Zen of Python》(Python 之禅)中说:“每件事都应该有直白的做法,而且最好只有一种。” PEP 8 在制定表达式和语句的风格时,就试着体现了这种思想。

  • 采用内联形式的否定词,而不要把否定词放在整个表达式的前面,例如,应该写 if a is not b 而不是 if not a is b。
  • 不要通过检测长度的办法(如 if len(somelist) == 0)来判断 somelist 是否为 [] 或 '' 等空值,而是应该采用 if not somelist 这种写法来判断,它会假定:空值将自动评估为 False。
  • 检测 somelist 是否为 [1] 或 'hi' 等非空值时,也应如此, if somelist 语句默认会把非空的值判断为 True。
  • 不要编写单行的 if 语句、 for 循环、 while 循环及 except 复合语句,而是应该把这些语句分成多行来书写,以示清晰。
  • import 语句应该总是放在文件开头。
  • 引入模块的时候,总是应该使用绝对名称,而不应该根据当前模块的路径来使用相对名称。例如,引入 bar 包中的 foo 模块时,应该完整地写出 from bar import foo,而不应该简写为 import foo。
  • 如果一定要以相对名称来编写 import 语句,那就采用明确的写法: from.import foo。
  • 文件中的那些 import 语句应该按顺序划分成三个部分,分别表示标准库模块、第三方模块以及自用模块。在每一部分之中,各 import 语句应该按模块的字母顺序来排列。

PEP 8 检测工具

我们可以使用 Johann C. Rocholl 开发的 pep8 程序,来自动检测代码是否符合 PEP8 规范。

通过 pip 来快速安装该程序:

$ pip install pep8

使用格式

$ pep8 [options] input...

主要参数解释:

  • --first 只显示每一类错误中的第一个错误
  • --exclude=patterns 指定要排除的文件或文件夹模式,以逗号分隔
  • --filename=patterns 指定待检测的文件名模式,默认以逗号分隔
  • --select=errors 指定要检测的错误类型
  • --ignore=errors 指定要忽略的错误类型
  • --show-source 显示每一个错误的源代码
  • --show-pep8 显示每个错误的具体 PEP8 规范(将自动设定 --first
  • --statistics 对错误和警告进行计数
  • --count 将错误和警告的总数打印到标准输出,如果不为零,那么退出代码将会被设为1
  • --max-line-length 设定每行的最大长度,默认为79
  • --format=format 设定错误的格式

更详细的使用介绍,请参考此文档:pep8 documentation

相关文章

Loading Likes...

发表评论

电子邮件地址不会被公开。 必填项已用*标注