PEP8 - 代码规范

  1. 缩进(indentation):使用四个空格表示每个缩进级别
    # 使用开分隔符(opening delimiter)进行对齐
    
    foo = long_func_name(var_one, var_two,
                         var_three, var_four)
    
    # 使用更多的缩进以和其他的代码单元区别开来
    # 如下例的,参数部分比函数体多四个缩进以和函数体进行区别
    def long_func_name(
            var_one, var_two, var_three,
            var_four)
        print(var_one)
    
    # 悬挂缩进(hanging indents):增加一个缩进级别
    foo = long_func_name(
        var_one, var_two, 
        var_three, var_four)
    # 或者:
    foo = long_func_name(
        var_one, var_two,
        var_three, var_four
    )
    
    
    a = [1, 2, 3,
         4, 5, 6]
    a = [
        1, 2, 3,
        4, 5, 6
    ]
  2. 最大行长度(所有行的最大长度均为79个字符)
  3. 正确的换行位置。推荐在二元操作符(andor以及%)之后。
    class Rectangle(Shape):
        def __init__(self, width, height,
                     color='black', emphasis=None, highlight=0):
            if (width == 0 and height == 0 and
                    color == 'red' and emphasis == 'strong' or
                    height > 100):
                raise ValueError("sorry, you lose")
            if width == 0 and height == 0 and (color == 'red' or emphasis is None):
                raise ValueError("I don't think so -- values are %s, %s" %
                                 (width, height))
            Shape.__init__(self, width, height, color,
                           emphasis, highlight)
  4. 空行
    • 顶级函数(当前文件中的第一个函数)或者顶级类(当前文件的第一个类)之前要有两个空行

    • 定义在类内部的函数(成员函数)之间要留有一个空行
    • 可以使用额外的空行(但要注意节制)以区分不同的函数组
    • 在一堆只有一行的函数之间不要使用空行(比如一些函数的空实现)
    • 在函数内部使用空行,来标识不同的逻辑单元
  5. import
    • 在独立的行引入独立的包
    • 但从一个包中添加不同的模块或者函数也是允许的
    • import文件应当总是位于文件的首部,仅在模块备注和文档之后,在模块的全局变量和常量之前的位置
    • import文件的顺序
    1. 标准库(sys, os)
    2. 相关的第三方库(numpy, pandas, matplotlib)
    3. 自定义的.py文件
      • 以组的形式标识上述三种import文件,也即是用一个空行隔开
      • 推荐使用绝对路径包含,因为可读性更好,并且不易出错。
  6. 字符串
    • 在python中,不对单引号和双引号作区分,PEP的代码规范也不对此有所推荐。任选其一,统一使用即可。然而,当一个字符串包含单引号或者双引号时,使用另外一种方式避免转义符(\)的使用,以提高可读性。
  7. 表达式中的空格
    • 在下述条件下,避免使用空格:
    1. 紧跟着大括号、中括号和小括号之前
    2. 紧连着逗号、分号、冒号之前
    3. 切片中的冒号
    4. 总是在如下的二元操作符的两边使用单空格:
      • 赋值  :  =
      • 增量赋值 : +=
      • 比较 :==    <       >    !=         <>         in          is 
      • 布尔: and      or        not   
      • 不要使用空格,当被用来标识一个关键字参数(使用函数)或者一个默认参数赋值(定义函数)
  8. 文档
    • 为所有公共模块或者函数、类以及方法编写文档。不必为非公共方法编写doc文档,但应有一个注释描述算法的功能,这条注释应当出现在def之后
    • 结尾的"""应当独占一行

猜你喜欢

转载自www.cnblogs.com/ls-2018/p/8971315.html