PEP8规则

我跟恺撒不同,我知道“三无”的真正含义,无口无心无表情,你是那种没心的人,懒得撒谎。

缩进

  • 不要使用 tab 缩进
  • 使用任何编辑器写 Python,请把一个 tab 展开为 4 个空格
  • 绝对不要混用 tab 和空格,否则容易出现 IndentationError

空格

  • 在 list, dict, tuple, set, 参数列表的 , 后面加一个空格
  • 在 dict 的 : 后面加一个空格
  • 在注释符号 # 后面加一个空格,但是 #!/usr/bin/python 的 # 后不能有空格
  • 操作符两端加一个空格,如 +, -, *, /, |, &, =
  • 接上一条,在参数列表里的 = 两端不需要空格
  • 括号((), {}, [])内的两端不需要空格

空行

  • function 和 class 顶上两个空行
  • class 的 method 之间一个空行
  • 函数内逻辑无关的段落之间空一行,不要过度使用空行
  • 不要把多个语句写在一行,然后用 ; 隔开
  • if/for/while 语句中,即使执行语句只有一句,也要另起一行

换行

  • 每一行代码控制在 80 字符以内
  • 使用 \ 或 () 控制换行

命名

  • 使用有意义的,英文单词或词组,绝对不要使用汉语拼音
  • package/module 名中不要出现

导入

  • 所有 import 尽量放在文件开头,在 docstring 下面,其他变量定义的上面
  • 不要使用 from foo imort *
  • import 需要分组,每组之间一个空行,每个分组内的顺序尽量采用字典序,分组顺序是:

标准库

第三方库
本项目的 package 和 module

  • 不要使用隐式的相对导入(implicit relative imports),可是使用显示的相对导入(explicit relative imports),如 from ..utils import parse,最好使用全路径导入(absolute imports)

  • 对于不同的 package,一个 import 单独一行,同一个 package/module 下的内容可以写一起:

为了避免可能出现的命名冲突,可以使用 as 或导入上一级命名空间

  • 不要出现循环导入(cyclic import)

注释

  • 文档字符串 docstring, 是 package, module, class, method, function 级别的注释,可以通过 doc 成员访问到,注释内容在一对 “”” 符号之间
  • function, method 的文档字符串应当描述其功能、输入参数、返回值,如果有复杂的算法和实现,也需要写清楚
  • 不要写错误的注释,不要无谓的注释
  • 优先使用英文写注释,英文不好全部写中文,否则更加看不懂

异常

  • 不要轻易使用 try/except
  • except 后面需要指定捕捉的异常,裸露的 except 会捕捉所有异常,意味着会隐藏潜在的问题
  • 可以有多个 except 语句,捕捉多种异常,分别做异常处理
  • 使用 finally 子句来处理一些收尾操作
  • try/except 里的内容不要太多,只在可能抛出异常的地方使用

Class(类)

  • 显示的写明父类,如果不是继承自别的类,就继承自 object 类
  • 使用 super 调用父类的方法
  • 支持多继承,即同时有多个父类,建议使用 Mixin

字符串

  • 使用字符串的 join 方法拼接字符串
  • 使用字符串类型的方法,而不是 string 模块的方法
  • 使用 startswith 和 endswith 方法比较前缀和后缀
  • 使用 format 方法格式化字符串

比较

  • 空的 list, str, tuple, set, dict 和 0, 0.0, None 都是 False
  • 使用 if some_list 而不是 if len(some_list) 判断某个 list 是否为空,其他类型同理
  • 使用 is 和 is not 与单例(如 None)进行比较,而不是用 == 和 !=
  • 使用 if a is not None 而不是 if not a is None
  • 用 isinstance 而不是 type 判断类型
  • 不要用 == 和 != 与 True 和 False 比较(除非有特殊情况,如在 sqlalchemy 中可能用到)
  • 使用 in 操作

参考链接

坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%