python都有什么规范

他说最近有一个小伙伴,刚刚毕业。整个技术学习的还是非常不错的,也成功的面试过了。

但是,没想到上班的第一天就来了一个小翻车。在这里就会有疑问了,难道是技术不达标嘛?不不不。难道是遇到了BUG没有解决出来?也不是,翻车的原因就是它写的代码,让公司里面的前辈看了显得太业余了,用行话说就是代码不规范。

代码规范,在平常在学习的时候大家可能会忽略。有很多的初学者也没有怎么注意。但是到公司里面我们才发现,代码规范显得尤为重要。



一 、代码编排

Python 在语法上使用 缩进 来确定代码块的开始和结束,对于每一级缩进,都应该是 4个空格。当然,在 Pycharm 当中,我们可以设置使用 tab 键来进行缩进。

那需要注意,缩进本身是强制性的,但是空格数量实际上语法并没有做限制。只不过同级代码缩进空格一致即可。

总体原则,避免不必要的空格。

  • 缩进。4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格。每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。各种右括号前不要加空格。逗号、冒号、分号前不要加空格。函数的左括号前不要加空格。如Func(1)。序列的左括号前不要加空格。如list[2]。操作符左右各加一个空格,不要为了对齐增加空格。函数默认参数使用的赋值符左右省略空格。不要将多句语句写在同一行,尽管使用‘;’允许。if/for/while语句中,即使执行语句只有一句,也必须另起一行。

二 、文档编排

  • 模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。不要在一句import中多个库,比如import os, sys不推荐。如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就
  • 要采用import XX。

三、命名规范

总体原则,新编代码必须按下面命名风格进行,现有库的编码尽量保持风格。

  • 尽量单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。模块命名尽量短小,使用全部小写的方式,可以使用下划线。包命名尽量短小,使用全部小写的方式,不可以使用下划线。类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。异常命名使用CapWords+Error后缀的方式。全局变量尽量只在模块内有效,类似C语言中的static。实现方法有两种,一是all机制;二是前缀一个下划线。函数命名使用全部小写的方式,可以使用下划线。常量命名使用全部大写的方式,可以使用下划线。类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。类的属性有3种作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public属性前,前缀一条下划线。类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。为避免与子类属性命名冲突,在类的一些属性前,前缀两条下划线。比如:类Foo中声明__a,访问时,只能通过Foo._Foo__a,避免歧义。如果子类也叫Foo,那就无能为力了。类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。

四、文档描述

1 为所有的共有模块、函数、类、方法写docstrings;非共有的没有必要,但是可以写注释(在def的下一行)。

2 如果docstring要换行,参考如下例子,详见PEP 257

Return a foobang

Optional plotz says to frobnicate the bizbaz first.

五、注释

总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!

注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。

注释对于代码的阅读、扩展以及维护都非常重要。在 Python 中常用的注释方式有三种,分别为块注释( Block Comments )、行内注释( Inline Comments )、文档字符串( Documentation Strings )。

  • 块注释:在代码内部比较常见,其通常由一至多个段落构成,段落之间应使用开头为 # 的空行隔开,每个段落由完整的句子构成,在每行以 # 和一个空格开始。另外,块注释和被注释代码之间应具有同级别的缩进,这样有助于区分注释和代码之间关联关系。如下代码体现出块注释:
@classmethod
def fromkeys(cls, iterable, v=None):    
    # There is no equivalent method for counters because the semantics    
    # would be ambiguous in cases such as Counter.fromkeys('aaabbc', v=2).    
    # Initializing counters to zero values isn't necessary because zero    
    # is already the default value for counter lookups.  Initializing    
    # to one is easily accomplished with Counter(set(iterable)).  For    
    # more exotic cases, create a dictionary first using a dictionary    
    # comprehension or dict.fromkeys().    
    raise NotImplementedError(        
        'Counter.fromkeys() is undefined.  Use Counter(iterable) instead.')
  • 行注释 :行内注释 是一种形式相对简单的注释,它和表达式或语句位于同一行,之间应通常使用两个空格隔开,注释部分应以 # 和一个空格开始。
one_list = []  # 创建列表
  • 文档字符串:
  • 在 Python 中,最重要的注释形式便是 文档字符串。主要用于两方面:
  • 用来对模块、类、函数、方法等进行说明;
  • 可以配合一些辅助工具来自动化生成代码文档
  • 当然大家现在可能很难体会到文档字符串的重要性,但是提到开源这个词,我们就会知道,一个开源文档的质量取决于它的可读性,而可读性往往伴随着大量的说明文档。
def function_name():
    """docstrings"""
    pass
  • 避免无谓的注释。

六、编码建议

  • 建议每行不超过 80 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来,而不推荐使用反斜杠 \ 进行连接。例如,如果一个字符串文本无法实现一行完全显示,则可以使用小括号将其分开显示,编码中考虑到其他python实现的效率等问题,比如运算符‘+’在CPython(Python)中效率很高,都是Jython中却非常低,所以应该采用.join()的方式。尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。异常中不要使用裸露的except,except后跟具体的exceptions。使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。比如说,在图 1 右侧这段代码中,if 判断语句同之前的代码多实现的功能不同,因此这里可以使用空行进行分隔。通常情况下,在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。

简单案例:

1.每个 import 语句只导入一个模块,尽量避免一次导入多个模块,例如:

#推荐
import os
import sys
#不推荐
import os,sys

2.不要在行尾添加分号,也不要用分号将两条命令放在同一行,例如:

#不推荐
height=float(input("输入身高:")) ; weight=fioat(input("输入体重:")) ;


 0
 0
 分享
评论图片
评论