• python编码规范


    python编码规范(PEP8)

    1、缩进

    1)每一级缩进使用4个空格

    2)续行应该与其包裹元素对齐,要么使用圆括号,方括号和花括号内的隐式行连接来垂直对齐要么使用挂行缩进对齐。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。

    a、对齐缩进(左边括号对齐)

     b、悬挂缩进

    c、层级缩进

     d、不推荐的缩进

     2、行的最大长度

    1)所有行限制的最大字符数为79.

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

    3)换行如下

     3、空行

    1)顶层函数和类的定义,前后用两个空行隔开

    2)类里的方法定义用一个空行隔开

    4、注释

    1)与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更新对应的注释!

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

    如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。在句尾结束的时候应该使用两个空格。在非英语国家的Python程序员,请使用英文写注释,除非你120%的确信你的代码不会被使用其他语言的人阅读

    3)块注释

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

      b、块注释内部的段落通过只有一个#的空行分隔

    4)行内注释

      a、有节制地使用行内注释

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

    5)文档字符串

      a、要为所有的公共模块,函数,类以及方法编写文档说明。

      b、非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后

      c、PEP_257描述了写出好的文档说明相关的约定。特别需要注意的是,多行文档说明使用的结尾三引号应该自成一行,例如:'''文档字符串'''

    6)模块的文档字符串注释 

      a、模块顶部三引号包起来的内容

      b、在这个注释中 通常是用来描述整个模块的功能(输出查看:print(模块.__doc__))

      c、类的文档字符串注释(类里面三引号包起来的内容、在这个注释中,描述类的功能:输出查看print(类.__doc__))

      d、函数级别的文档字符串注释(

        自动添加参数,描述每个参数的描述、

        描述整个函数的功能

        输出查看print(函数.__doc__))

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

    5、命名约定

      a、变量命名

        永远不要使用字母'l'(小写的L),‘O’(大写的O),或者"I"(大写的I)作为单字符变量名。

        在有些字体里,这些字符无法和数字0和1区分,如果想用"l",用"L"代替

      b、函数命名

        函数名应该小写,如果想提高可读性可以用下划线分隔

        大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用(比如threading.py),保持向后兼容性

      c、类命名

        类名一般使用首字母大写的约定

        在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。

        注意,对于内置的变量名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量

      d、类里面函数和方法参数

        始终要将self作为实例方法的第一个参数

        始终要将cls作为类方法的第一个参数

        如果函数的参数名和已有的关键词冲突,在最后加单一下划线比缩写或随意拼写更好。因此class_比clss更好。

    6、字符串引号

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

    7、模块和包导入规范

      1)命名规范

        模块名称要短、使用小写,并避免使用特殊符号,比如点(.)和问号(?)

        因此请尽量保持模块名称简单,以无需分开单词(不推荐在两个单词之间使用下划线)

      2)模块导入建议

        - 差:from modu import *:可读性差、全部导入,使用的时候方便,但是不知道引用的是否为该模块的一部分、或是内建函数或者上文定义的?

        - 稍好:from modu import sqrt:x = sqrt(4)如果在import语句与这条语句之间,sqrt没有被重复定义,它也行是模块modu里的某个函数

        - 最好的做法:import modu:x = modu.sqrt(4) # sqrt显然是属于模块modu的

        - 推荐:import os

           import sys

        - 不推荐:import sys,os

        - 也可以:from subprocess import Popen,PIPE

        - 尽量不要使用这种方式导入:from modu1 import *

        - __all__变量:如果模块中存在全局变量__all__,那么通过from XXX import * 导入该模块时只会导入__all__变量中指定的方法和变量,没有的话默认全部导入

        - 模块.py

        __all__= ['name','func1']

      from 模块 import *
      print(name)
      print(func1())

      可访问name和func1,模块.py中的其他不能访问

       - 包 

        1)任意包含__init__.py文件的目录都被认为是一个Python包

        2)因为导入包时会首先执行包下init.py这个文件
        3)包中init文件中__all__变量的作用
          __init__文件中存在全局变量__all__,通过from xxx import * 导入时也只会导入__all__变量中制定的模块,没有的话默认全部导入
        4)Python提供非常简单的包管理系统,即简单地将模块管理机制扩展到一个目录上(目录扩展为包),任意包含__init__.py文件的目录都被认为是一个Python包。导入一个包里不同模块的方式和普通的导入模块方式相似,特别的地方是__init__.py 文件将集合所有包范围内的定义。
        5)pack/目录下的modu.py文件通过import pack.modu语句导入。该语句会在pack目录下寻找__init__.py文件,并执行其中所有顶层语句。以上操作之后,modu.py内定义的所有变量、方法和类在pack.modu命名空间中均可看到。
        6)一个常见的问题是往__init__.py中加过多代码,随着项目的复杂度增长,目录结构越来越深,子包和更深嵌套的子包可能会出现。在这种情况下,导入多层嵌套的子包中的某个部件需要执行所有通过路径里碰到的__init__.py文件。如果包内的模块和子包没有代码共享的需求,使用空白的__init__.py文件是正常甚至好的做法
        7)最后,导入深层嵌套的包可用这个方便的语法:import very.deep.module as mod。该语法允许使用mod替代冗长的very.deep.module

      

    本文来自博客园,作者:%女王%,转载请注明原文链接:https://www.cnblogs.com/lynne-wu/p/15371815.html

  • 相关阅读:
    【LeetCode】152. 乘积最大子数组(DP)
    【剑指Offer】49. 丑数(三指针)
    [P1979][NOIP2013] 华容道 (BFS建图+SPFA)
    [P1850][NOIP2016] 换教室 (期望+DP+Floyd)
    差分约束学习笔记
    [P1291][SHOI2002] 百事世界杯之旅 (期望)
    [P4342][IOI1998] Polygon (区间DP)
    [P3802] 小魔女帕琪 (期望)
    [P1273] 有线电视网 (树形DP+分组背包)
    树链剖分学习
  • 原文地址:https://www.cnblogs.com/lynne-wu/p/15371815.html
Copyright © 2020-2023  润新知