python之PEP8编码规范

发布于 2021-08-06  108 次阅读


缩进

  • 每一级缩进使用四个空格
  • 续行应该与其包裹元素对其,要么使用圆括号,方括号和花括号内的隐试行连接,来垂直对其,要么使用挂行缩进对其。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。推荐:# 隐试行连接垂直对其
    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('挂行缩进')
    不推荐:# 在不使用垂直对其时,禁止把参数放在第一行
    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('挂行缩进')

行的最大长度

  • 所有行限制的最大字符数为79
  • 没有结构化限制的大块文本(文档字符或者注释),每行的最大字符数限制在72

空行

  • 顶层函数和类的定义,前后使用两个空行隔开
  • 类里的方法定义用一个空行隔开

import导入

  • 导入通常在分开的行,例如:# 推荐
    import os
    import sys
    for subprocess import Popen, PIPE
    # 不推荐
    import sys, os
  • 导入注释位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。
  • 大于应该按照以下 以下顺序分组:
    1. 标准库导入
    2. 相关第三方库导入
    3. 本地应用/库特定导入
    4. 应该在每一组导入之间加入空行
  • 蚁剑使用绝对路径导入,如果导入系统没有正确的配置(比如包里的一个目录在sys.path里的路径),使用绝对路径会更加可读并且性能更好(至少能提供更好的错误信息)

注释

  • 注释总览
    • 与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更改对应的注释
    • 注释应该是完整的句子
    • 如果注释很短,句尾的句号可以省略。块注释一般由完整句子的一个或者多个段落组成,并且每句话结束有个句号
    • 在句尾结束的时候应该使用两个空格
    • 在非英语国家的Python程序员,请使用英文写注释,除非你120%的确信你的代码不会被使用其他语言的人阅读。
  • 块注释
    • 块注释永昌适用于跟随他们的某些(或全部)代码,病所进到与代码相同的级别。块注释的每一行开通使用一个#的空格分隔
    • 块注释内部的段落通过只有一个#的空行分隔
  • 行内注释
    • 有节制地使用行内注释
    • 行内注释是代码语句同行的注释。行内注释和代码至少有两个空格分隔。注释由#和一个空格开始
    • 如果状态明显的话,行内注释是不必要的,反而会分散注意力
  • 文档字符串
    • 等为所有的公共模板,函数,类以及方法编写文档说明
    • 非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def哪一行之后
    • 多行文档说明使用的结尾三引号应该自成一行
    """Return a foobang
    Optional plotz says to frobnicate the bizbaz first.
    """
    • 对于单行的文档说明,尾部的三引号应该和文档在同一行

命名约定

  • 应该避免的名字
    • 永远不要使用字母l,O,或者I作为单字符变量命名
    • 在有些字体里,这些字符无法和数字0和1区分,如果想用l,使用L替代
  • 类名
    • 类名一般使用首字母大写的约定
    • 在接口呗文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替
    • 注意:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量
  • 函数名
    • 函数名应该小写,如果想提高可读性可以用下划线分隔
    • 大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用,保持向后兼容
  • 函数和方法参数
    • 始终要将self作为实例方法的第一个参数
    • 始终要将cls作为类静态方法的第一个参数
    • 如果函数的参数名和已有的关键词冲突,在最后加单一下划线比缩写或随意拼写更好。因此class_clss更好

编程建议

  • 代码应该用不损害其他Python实现的方式去编写。
  • 和像None这样的单列对象进行比较的时候应该使用用is或者is not,永远不要等号运算。
  • 使用 is not 运算符,而不是 not … is 。虽然这两种表达式在功能上完全相同,但前者更易于阅读,所以优先考虑。

参考文档

https://www.jianshu.com/p/ffcc66bab3ce