分享

优雅的代码--PEP8规范

 正合叔 2019-10-31

每日分享

Progress is impossible without change, and those who cannot change their minds cannot change anything.

没有改变就不可能取得进步,那些不愿改变想法的人无法改变任何事。

小闫语录

想要改变,首先是改变想法,否则只能重蹈覆辙。

PEP8规范

当入职一家公司,看到了一份乱糟糟的源码,你是不是心里奔腾着无数的草泥马?当你离职,留给后人的代码又如何呢?与人方便与己方便,规范代码,从我做起。为了让我们的代码提高可读性,便于后期维护,官方提供了一种规范,这就是PEP8。那么具体的内容是什么呢?下面一起来看看吧。

1.缩进

1.对于每一级缩进,采用四个空格(有的公司使用3个空格,视情况而定,但是官方推荐为4个)。如下:

  1. def func():

  2. print('I'm EthanYan')

print前面有4个空格。

也许你因为使用一些工具,习惯了Tab键。但是有一点你要明白,有些地方tab键不是4个空格,而且python3中不允许混合使用空格和Tab键缩进。

2.括号里面包裹的参数过多时,可以通过换行缩进来表示,如下:

  1. demo = func_name(var_one,

  2. var_two,

  3. var_three)

当然,下面的示例也是符合规范的:

  1. my_list = [

  2. 1,2,3,

  3. 4,5,6

  4. ]

2.行最大长度

为了查看代码时,不需要来回的拉取滚动条,影响体验,所有行限制的最大字符数为79。对于文档字符串或者注释则应控制在72个字符内。

对于较长的代码优先使用的续行方式并不是通过反斜杠,而是通过小括号,中括号以及大括号中的隐式续行方式实现。

3.二元运算符

在使用一些二元运算符时,如果变量名超长,需要换行,怎么办?答案是在运算符之前换行。

  1. # 推荐:运算符和操作数很容易进行匹配

  2. income = (gross_wages

  3. + taxable_interest

  4. + (dividends - qualified_dividends)

  5. - ira_deduction

  6. - student_loan_interest)

但是为了便于查看,尽量写在一行。

4.空行

1.顶层函数和类定义时,前后用两个空行隔开。

2.类里面的方法定义用一个空行隔开。

3.对于函数中不同的逻辑块可以用空行隔开。

5.源代码

1.Python核心发布版本中的代码总是以UTF-8格式编码(或者在Python2中用ASCII编码)。

2.使用ASCII(在Python2中)或UTF-8(在Python3中)编码的文件不应具有编码声明。

3.在标准库中,如果需要使用非默认的编码,应该将他们放在注释或者文档字符串中。比如作者的姓名。

6.导入

1.我们在导入模块的时候,最好是放在顶部,而且还应该遵循一定的规律:先导入标准库,再导入相关第三方库,最后导入本地模块应用之类的。每一组导入之间,加上空行就最好不过了。

2.当然有时为了避免出现循环导入的问题,我们需要在特殊的地方导入,这也无可厚非。

3.导包的时候还要注意使用绝对路径导入,增加可读性,提高代码性能。但是凡事有例外,比如你的绝对路径那么长,好吧,我比划了一下,你没有看见,不怪我。这时你可以采用相对路径:

  1. from . import ethanyan

4.避免使用通配符的导入,这样会增加命名空间中名字的重复率。如下的方式,不推荐使用:

  1. from ethanyan import *

7.引号

单引号和双引号是相同的,根据你自己的喜好使用。但是为了避免出错,尽量使用单双引号包裹的形式;而不是单引号里面继续使用单引号,再用反斜杠进行转义。

8.表达式中的空格问题

1.对于小括号、中括号和大括号的使用,表达式紧跟括号,不要添加空格。

  1. yes: func(1, 2)

  2. no : func( 1, 2)

2.逗号、封号、冒号等紧跟前面字符:

  1. yes: x, y, z

  2. no : x , y , z

3.冒号再切片中,就像二元运算符一样,两边应该用相同数量的空格:

  1. example[1 : 9]

9.注释

有一句话是这样说的:与代码相矛盾的注释比没有注释还糟糕。所以请不要乱添加注释,而且在修改完代码之后,请更新你的注释,不要给后人留下一个烂摊子。

紧跟代码的注释,应有至少两个空格的分割,如下:

  1. x = x + 1 # 这是测试数据

10.命名规范

1.命名与python中标识符的命名规则一样,由字母数字下划线组成,且数字不能开头。

2.当然还有一些特殊的规则,比如大驼峰和小驼峰命名形式。

3.如果以单下划线开头命名,那么在 frommimport*的时候是不会导入的。

4.有时候你会看到一些以单下划线结尾的名字,不要奇怪。这是为了和python内部关键词不冲突的一种约定。

5.命名的时候不要使用魔方方法的形式如 __ni__

6.避免混淆,不要使用有歧义的字符。如 l(小写的L)和 1多像,还有 O(英文字母)和 0(数字)多像,对吧?你也不想认错。

7.类名首字母请大写。

8.异常命名的时候最后以 Error结尾,让人一下子辨别出来。

9.命名要做到见名知义。

10.函数名要小写。

11.一些常量名要全部使用大写。比如在项目中的一些常量放在一个单独的文件中,他们的名字应该如下:MAX_OVERFLOW

11.其他的建议

1.避免在尾部添加空格。因为尾部的空格通常都看不见,会产生混乱。比如,一个反斜杠后面跟一个空格的换行符,不算续行标记。有些编辑器不会保留尾空格,并且很多项目(像 CPython)在pre-commit钩子调用中会过滤掉尾空格。

2.前面也有所提到,就是在二元运算符两边都加一个空格。那么有哪些符号呢?

  1. 赋值:= 、+= 、-=

  2. 比较:== 、< 、> 、!= 、<> 、<= 、>= 、in 、not in 、is 、is not

  3. 布尔:and 、or 、not

3.在使用运算符的时候,有一个优先级的问题,我们需要在较低优先级的运算符两边添加空格(别指望提示,需要你自己判断)。空格最好是用一个,而且前后数量相等。如下:

  1. x = x*2 - 1

4.指定关键字参数或者默认参数值的时候,不要在 =附近添加空格。

当然,规范中还有很多很多条目,这里只列出那些常用的、需要指出的部分。公司一般有自己的规范,严格按照文档进行编码即可。当然一些创业公司可能没有,建议你使用本规范,养成良好的编码习惯,工作中,看着也开心。最后祝愿大家代码无bug。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多