美文网首页python笔记
Python笔记 | PEP 8 完善你的代码风格

Python笔记 | PEP 8 完善你的代码风格

作者: WangLane | 来源:发表于2019-03-14 15:06 被阅读0次

再读PEP8

好久好久没有写代码了,PEP8已经快忘得一干二净。重新读一遍,然后记录下来。

一、代码布局

1.缩进

每个缩进都使用四个空格, 连续行的原则是要和下一行在观感上有明显的区分

连续行应该和对应的括号垂直对齐

# GOOD
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
# BAD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
foo = long_function_name(var_one, var_two,
    var_three, var_four)

或者在前面添加空格来和下一行区分

# GOOD
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)
# BAD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

永远不要用tab缩进,如果用vim的话,在参数中记得加入,vim会自动把tab拆分成空格,现在大多文本编辑器和IDE都会支持这个功能。

set shiftwidth=4 

2. 行字符限制

每行最大字符数不超过79,但是一些团队会要求更长的限制,以便于代码阅读和维护。但是注释长度最好不要超过限制。

正确的运算符断行

income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

3. 关于空行

顶级函数和类的周围要有两个空行
类中的方法周围要有一个空行
使用空行来分割逻辑块

4.文件编码

文件编码
python内核文件中始终使用UTF-8编码
使用ASCII(python2) 和UTF-8(python3)不需要声明

5.import模块

如何Import 模块
不要一下导入两个模块
模块导入永远放在文件开头,紧接着模块注释和docstring
模块导入顺序如下:
1.标准库导入
2.第三方模块导入
3.本地模块导入

Yes: import os
     import sys
     from subprocess import Popen, PIPE
No:  import sys, os

二、字符串引号

不要混用单引号和双引号,保持一个习惯,要么一直用单引号,要么一直用双引号。
三引号字符串,总是使用双引号
三引号字符串,总是使用双引号
三引号字符串,总是使用双引号

三、表达式和语句中的空格

1.最烦人的怪癖

请避免以下情况的空格:

紧跟大小括号之后的空格

YES

spam(ham[1], {eggs: 2})

NO

spam( ham[ 1 ], { eggs: 2 } )

逗号之后,括回之前

Yes:

foo = (0,)

No:

bar = (0, )

括号,逗号,分号前面

Yes:

if x == 4: print x, y; x, y = y, x

No:

if x == 4 : print x , y ; x , y = y , x

但是,切片中为了清楚区分,冒号前后有时候可以加

YES:

ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]

函数,字典的括号前面不要加空格

Yes: spam(1)
No:  spam (1)
Yes: dct['key'] = lst[index]
No:  dct ['key'] = lst [index]

二元运算符,左右各一个

YES

x = 1
y = 2
long_variable = 3

NO:

x             = 1
y             = 2
long_variable = 3

保证代码可读性为主

YES

i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

传参等号不要加空格(有时候会报错)

YES

def complex(real, imag=0.0):
    return magic(r=real, i=imag)

NO:

def complex(real, imag = 0.0):
    return magic(r = real, i = imag)

别把代码塞到一行

NO:

if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

四、注释

时刻保证在代码改变的时候,优先修改注释!!!
注释应该是完整的句子,开头字母大写。除非开头是一个小写字母开头的标识符
在多句子的注释中,每一句结尾都应该有两个空格。除非是最后一句。
一定要用英文编写注释!!!!除非你百分之120确信你的代码不会被其他语言者阅读。

1.块注释

每一行用 # 加一个空格开始

2.行内注释

请保守的使用行内注释,如果不是十分必要不要乱加。看着乱。

3.文档字符串(Document String)

结束的三引号另起一行,如果是单行字符串就不必另起一行。

五、命名约定(Naming Convention)

1.避免出现的命名

永远不要用大写i和小写L,还有大写O作为变量名称。

2.包和模块的命名

小写,如果有必要可以加下划线增加可读性

3.类的命名

每个单词开头字母大写,比如CapWords

4. Exception类的命名

遵从类的命名规则,最后要加一个Error后缀

5.函数和变量命名

函数名小写,除非你所在的组织历史遗留的风格是mixedStyle这种风格的,不然不要这么用。当然,如果加下划线能够增加可读性可以加。

6.常量

常量全部大写,可加下划线,比如MY_CONSTANTS

六、一些编程的建议

用is not 替换not is

# YES
if foo is not None:

# NO
if foo not  is None:

用def 定义简单函数而不是lambda

# YES
def f(x): return 2*x

# NO
f = lambda x: 2*x

保持return 的一致性

# Yes
def foo(x):
    if x >= 0:
        return math.sqrt(x)
    else:
        return None

# No
def foo(x):
    if x >= 0:
        return math.sqrt(x)

使用.startswith() 和 .endswith()来检查开头和结尾,避免使用切片检查。

相关文章

网友评论

    本文标题:Python笔记 | PEP 8 完善你的代码风格

    本文链接:https://www.haomeiwen.com/subject/ugmqmqtx.html