Python代码规范简单总结
python学习 . 2020/04/23发布 . shanyonggang_web . 我要评论 . 341阅读

后续再编写python代码过程中,需按照PEP8代码规范进行编写,参考网址:PEP8代码规范,大致内容如下:

代码缩进

每一级缩进四个空格,续行应该与其包裹元素对其,如下:

# 与左括号对齐
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# 用更多的缩进来与其他行区分
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

# 挂行缩进应该再换一行
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

缩进方式不能混用,如空格和制表符

行代码长度

行限制的最大字符数为79,没有结构化限制的大块文本(文档字符或者注释),每行的最大字符数限制在72(文档和注释)。

运算符

段落中的公式总是在二元运算符和关系之后中断,显示出来的公式总是要在二元运算符之前中断

空行设计

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

import导入

导入分行导入

导入总是位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。

导入顺序(在每类库导入之前加空格):

  • 标准库导入
  • 相关第三方库导入
  • 本地应用和库导入

避免通配符的导入(from import *)

模块级的“呆”名

__all__ , __author__ , __version__ 等这样的模块级“呆名“(也就是名字里有两个前缀下划线和两个后缀下划线),应该放在文档字符串的后面,以及除from __future__ 之外的import表达式前面。Python要求将来在模块中的导入,必须出现在除文档字符串之外的其他代码之前,如:

"""This is the example module.

This module does stuff.
"""

from __future__ import barry_as_FLUFL

__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles'

import os
import sys

字符串

在Python中,单引号和双引号字符串是相同的。PEP不会为这个给出建议。选择一条规则并坚持使用下去。当一个字符串中包含单引号或者双引号字符的时候,使用和最外层不同的符号来避免使用反斜杠,从而提高可读性。

无关空格

应该避免使用无关空格,如:

  • 紧跟在小括号,中括号或者大括号后。
  • 紧贴在逗号、分号或者冒号之前。
  • 紧贴在函数参数的左括号之前。
  • 紧贴索引或者切片的左括号之前。
  • 为了和另一个赋值语句对齐,在赋值运算符附件加多个空格。

其他建议

  • 避免在尾部添加空格。
  • 总是在二元运算符两边加一个空格
  • 在制定关键字参数或者默认参数值的时候,不要在=附近加上空格
  • 功能型注释应该使用冒号的一般性规则,并且在使用->的时候要在两边加空格。
  • 当给有类型备注的参数赋值的时候,在=两边添加空格(仅针对那种有类型备注和默认值的参数)
  • 复合语句(同一行中的多个语句)通常是不允许的。

注释

  • 块注释
  • 行内注释

文档字符串

  • 要为所有的公共模块,函数,类以及方法编写文档说明。非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后。
  • 特别需要注意的是,多行文档说明使用的结尾三引号应该自成一行
  • 对于单行的文档说明,尾部的三引号应该和文档在同一行。

异常名

因为异常一般都是类,所有类的命名方法在这里也适用。然而,你需要在异常名后面加上“Error”后缀(如果异常确实是一个错误)。

函数

  • 函数名应该小写,如果想提高可读性可以用下划线分隔。
  • 始终要将 self 作为实例方法的的第一个参数。
  • 始终要将 cls 作为类静态方法的第一个参数。
  • 如果函数的参数名和已有的关键词冲突,在最后加单一下划线比缩写或随意拼写更好。
  • 方法和实例变量:使用下划线分隔小写单词以提高可读性。

常量

常量通常定义在模块级,通过下划线分隔的全大写字母命名。例如: MAX_OVERFLOW 和 TOTAL。

补充

  • 使用 ”.startswith() 和 ”.endswith() 代替通过字符串切割的方法去检查前缀和后缀。
  • 对象类型的比较应该用isinstance()而不是直接比较type。
  • 对于序列来说(strings,lists,tuples),可以使用空序列为false的情况。
  • 不要用 == 去和True或者False比较

  • 有疑问请在下方评论区留言,我会尽快回复。
  • Email私信我: 511248513@qq.com 或添加博主 微信
本文作者:shanyonggang_web
发布时间:2020年4月23日 22:11
许可协议: 署名-非商业性使用 4.0 国际许可协议
知识共享许可协议     转载请保留原文链接及作者
正在加载今日诗词....
您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的


登录 后回复

当前暂无评论,点击登录来做第一个吃螃蟹的人吧!