每日分享
Progress is impossible without change, and those who cannot change their minds cannot change anything.
没有改变就不可能取得进步,那些不愿改变想法的人无法改变任何事。
小闫语录:
想要改变,首先是改变想法,否则只能重蹈覆辙。
PEP8规范
当入职一家公司,看到了一份乱糟糟的源码,你是不是心里奔腾着无数的草泥马?当你离职,留给后人的代码又如何呢?与人方便与己方便,规范代码,从我做起。为了让我们的代码提高可读性,便于后期维护,官方提供了一种规范,这就是PEP8。那么具体的内容是什么呢?下面一起来看看吧。
1.缩进
1.对于每一级缩进,采用四个空格(有的公司使用3个空格,视情况而定,但是官方推荐为4个)。如下:
def func():
print("I'm EthanYan")
print前面有4个空格。
也许你因为使用一些工具,习惯了Tab键。但是有一点你要明白,有些地方tab键不是4个空格,而且python3中不允许混合使用空格和Tab键缩进。
2.括号里面包裹的参数过多时,可以通过换行缩进来表示,如下:
demo = func_name(var_one, var_two, var_three)
当然,下面的示例也是符合规范的:
my_list = [ 1,2,3, 4,5,6 ]
2.行最大长度
为了查看代码时,不需要来回的拉取滚动条,影响体验,所有行限制的最大字符数为79。对于文档字符串或者注释则应控制在72个字符内。
对于较长的代码优先使用的续行方式并不是通过反斜杠,而是通过小括号,中括号以及大括号中的隐式续行方式实现。
3.二元运算符
在使用一些二元运算符时,如果变量名超长,需要换行,怎么办?答案是在运算符之前换行。
# 推荐:运算符和操作数很容易进行匹配 income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - 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.导包的时候还要注意使用绝对路径导入,增加可读性,提高代码性能。但是凡事有例外,比如你的绝对路径那么长,好吧,我比划了一下,你没有看见,不怪我。这时你可以采用相对路径:
from.import ethanyan
4.避免使用通配符的导入,这样会增加命名空间中名字的重复率。如下的方式,不推荐使用:
from ethanyan import*
7.引号
单引号和双引号是相同的,根据你自己的喜好使用。但是为了避免出错,尽量使用单双引号包裹的形式;而不是单引号里面继续使用单引号,再用反斜杠进行转义。
8.表达式中的空格问题
1.对于小括号、中括号和大括号的使用,表达式紧跟括号,不要添加空格。
yes: func(1,2)
no : func(1,2)
2.逗号、封号、冒号等紧跟前面字符:
yes: x, y, z
no : x , y , z
3.冒号再切片中,就像二元运算符一样,两边应该用相同数量的空格:
example[1:9]
9.注释
有一句话是这样说的:与代码相矛盾的注释比没有注释还糟糕。所以请不要乱添加注释,而且在修改完代码之后,请更新你的注释,不要给后人留下一个烂摊子。
紧跟代码的注释,应有至少两个空格的分割,如下:
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.前面也有所提到,就是在二元运算符两边都加一个空格。那么有哪些符号呢?
赋值:=、+=、-=
比较:==、<、>、!=、<>、<=、>=、in、notin、is、isnot
布尔:and、or、not
3.在使用运算符的时候,有一个优先级的问题,我们需要在较低优先级的运算符两边添加空格(别指望提示,需要你自己判断)。空格最好是用一个,而且前后数量相等。如下:
x = x*2- 1
4.指定关键字参数或者默认参数值的时候,不要在 =
附近添加空格。
当然,规范中还有很多很多条目,这里只列出那些常用的、需要指出的部分。公司一般有自己的规范,严格按照文档进行编码即可。当然一些创业公司可能没有,建议你使用本规范,养成良好的编码习惯,工作中,看着也开心。最后祝愿大家代码无bug。