python 规范pep_python PEP8规范

Python PEP8规范

PEP8是Python的编码规范,其中心在于提高代码的可读性,遵循一个合理的规范,能提高维护,开发

1. 代码布局:

1) 缩进:每一级缩进使用4个空格(不能空格和tab键混用)

2) 换行首选括号,再是反斜杠。换行点在操作符后敲回车

3) 所有行限制的最大字符数为79,(文档字符串或注释不超过72个字符)

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

5) Py3中默认为UTF-8

6) import导入时单独分开导入,from xx import xx,xx 可以多个导入

7) 导入顺序:标准库导入-->相关第三方库导入-->本地应用/库特定导入-->,并配置相关的__all__说明书(每一组导入之间加入空行。)

8) 包导入时:尽量使用绝对路径,移植性和阅读性更高

9) 导入位于文件的顶部:在模块注释和文档字符后,全局变量和常量前

10) 单引号和双引号字符串是相同的。

2. 空格

11) 紧跟在小括号,中括号或者大括号后不使用空格

12) 逗号、分号或冒号前不使用空格

13) 紧贴在函数参数的左括号之前不使用空格

14) 紧贴索引或者切片的左括号之前不使用空格

15) 函数默认参数等等号两侧不使用空格

16) 避免在尾部添加空格不使用空格

17) 二元运算符两边使用空格

18) 使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格(hypot2 = x*x + y*y)

19) 功能型注释应该使用冒号的一般性规则,并且在使用->的时候要在两边加空格(def munge() -> AnyStr: ...)

20) 当给有类型备注的参数赋值的时候,在=两边添加空格(def munge(sep: AnyStr = None): ...)

21) 通常不推荐使用复合语句(一行多语句)

22) if/for/while 块中,执行语句必须另起一行

3. 注释

23) 不好理解的注释,不如没有注释。

24) 当代码更改时,优先更新对应的注释

25) 注释应该是完整的句子

26) 如果一个注释是一个短语或句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。

27) 如果注释很短,结尾的句号可以省略。

28) 块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。

29) 在句尾结束的时候应该使用两个空格。

30) 块注释通常适用于跟随它们的某些(或全部)代码,并缩进到与代码相同的级别。块注释的每一行开头使用一个#和一个空格(除非块注释内部缩进文本)。

31) 块注释内部的段落通过只有一个#的空行分隔。

32) 行内注释是与代码语句同行的注释。行内注释和代码至少要有两个空格分隔。注释由#和一个空格开始。

33) 要为所有的公共模块,函数,类以及方法编写文档说明。非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后。

34) 对于单行的文档说明,尾部的三引号应该和文档在同一行。

35) 多行文档说明使用的结尾三引号应该自成一行

4. 命名规范

36) 大小写字母和下划线组成

37) 首字母大写缩进:所有字符用大写,HTTPServerError

38) 单下划线开始:表示内部使用的方法,不建议修改

39) 单下划线结束:用于避免与Python关键字或方法冲突

40) 双下划线开始:定义类中的属性,不能直接通过类名进行调取,而是类方法获取,或者是类名._类名__属性名进行获取,(一般不推荐使用)

41) 双下划线开始结束:永远不要自定义该类型的方法,用于内部的魔法方法

42) 特别注意"l"(小写l)、"I"(大写i)、"1"(数字1)、"0"(数字0),"O"(大写o),不作为单个变量名

43) 模块名:全小写并简短,可以使用下滑线

44) 包名:全小写并简短,不建议下滑线

45) 类名:首字母大写。内部类加上前导下划线

46) 异常名:沿用类名规则并以"Error"为前缀

47) 全局变量名:尽量只在模块内有效。实现为__all__或者是前缀一个下划线

48) 函数名:小写,可用下划线分隔

49) 方法名和实例变量:下划线分隔的小写字母,私有方法和实例变量前用单下划线

50) 常量:在模块级别定义,全大写和下划线分隔

51) 类的属性有三种作用域public、non-public与subclass API,类似Java中的public、private、protected。non-public属性前,前缀单下划线

52) 公有属性和保留字冲突时,在属性后加一个下划线,比缩写和拼写好

53) 如果属性不希望被子类继承时,用双下滑先开头,可以进行避免。但需要注意调取时的命名内容,类名._类名__属性名可以调用,或者是子类出现相同的类名和属性名,会有冲突

54) 类的实例方法第一参数为self,类方法第一参数为cls

5. 编程建议

55) 使用.join() 代替“+”连接操作

56) 和像None这样的单例对象进行比较的时候应该始终用 is 或者 is not,永远不要用等号运算符。

推荐;if foo is not None:

不推荐:if foo == None:

57) 使用 is not 运算符,而不是 not … is

推荐:iffoo is not None:

不推荐:ifnot foo is None:

58) 使用复杂比较实现排序时,应用__eq__,__ne__,.....等效率更高,并且可以通过function.total_ordering()提供生成缺少的比较操作方法

59) 始终使用def表达式,而不是通过赋值语句将lambda表达式绑定到一个变量上。

推荐:deff(x): return 2*x

不推荐:f= lambda x: 2*x

60) 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception

61) 当捕获到异常时,如果可以的话写上具体的异常名,而不是只用一个except: 块。

62) 使用 rasie ValueError(‘message’) 而不是 raise ValueError, ‘message’。

63) Try/except语句,限制try语句来减少必要代码的数量

推荐:try:

value = collection[key]

except KeyError:

return key_not_found(key)

else:

return handle_value(value)

不推荐:

try:

return handle_value(collection[key])

except KeyError:

return key_not_found(key)

64) 当代码片段局部使用了某个资源的时候,使用with 表达式来确保这个资源使用完后被清理干净。用try/finally也可以。

65) 返回的语句保持一致。函数中的返回语句都应该返回一个表达式,或者都不返回。如果一个返回语句需要返回一个表达式,那么在没有值可以返回的情况下,需要用 return None 显式指明,并且在函数的最后显式指定一条返回语句

推荐:

deffoo(x):

if x >= 0:

return math.sqrt(x)

else:

return None

不推荐:

deffoo(x):

if x >= 0:

return math.sqrt(x)

66) 使用字符串方法代替字符串模块。

67) 使用 ”.startswith() 和 ”.endswith() 代替通过字符串切割的方法去检查前缀和后缀。

推荐: iffoo.startswith('bar'):

糟糕: if foo[:3] == 'bar':

68) 对象类型的比较应该用isinstance()而不是直接比较type。

正确: ifisinstance(obj, int):

糟糕: if type(obj) is type(1):

69) 对于序列来说(strings,lists,tuples),可以使用空序列为false的情况

正确: ifnot seq:

糟糕: if len(seq):

70) 字符串不以空格结尾

71) 不要用 == 去和True或者False比较

正确: ifgreeting:

糟糕: if greeting == True:

更糟: if greeting is True:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PEP 8是Python代码样式指南,它提供了一些规范和建议,以帮助开发者编写更具可读性和一致性的Python代码。根据PEP 8,以下是一些常见的规范和建议: 1. 文件编码:在Python文件的开头添加文件编码声明,通常使用UTF-8编码。 2. 导入顺序:按照先导入Python包,再导入第三方包,最后导入自定义的包的顺序进行导入。这样可以更清晰地组织导入语句。 3. 避免使用import *:尽量避免使用import *来导入所有模块,因为这样会导致命名空间污染和代码可读性降低。 4. 返回值:确保每个return语句都能有返回值,不能返回的应显式地返回None。这样可以提高代码的可读性和可维护性。 以上是PEP 8中的一些规范和建议,遵循这些规范可以使你的Python代码更加规范和易于理解。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Python-Python编码规范PEP8)](https://blog.csdn.net/lady_killer9/article/details/109150536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* [python编码规范pep8](https://blog.csdn.net/m0_46673598/article/details/126274989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值