• Python标准库中的编码风格整理


    目的:提高源程序的质量和可维护性

    缩进

    • 一律使用4个空格代表一层缩进,不允许使用Tab
    • 一行字符最多为79个,既在80列时换行
    • 对顺序排放的大块文本(文档字符串或注释),推荐将长度限制在72字符

    折叠长行

    使用Pyhon支持的圆括号,方括号和花括号内的行延续。如果需要,你可以在表达式周围增加一对额外的圆括号,但是有时使用反斜杠看起来更好,恰当得缩进可以看出延续的行
    下面是一个示例(增加一对额外的圆括号):

    if (2 > 1 and 4 > 2
            and 8 < 99):
        print('Ok!')
    
    • 1
    • 2
    • 3

    下面是更好的示例(使用反斜杠):

    if 2 > 1 and 4 > 2 \
            and 8 < 99:
        print('Ok!')
    
    • 1
    • 2
    • 3

    行间距

    • 如果函数不在类中,则函数与函数之间,空两行
    • 如果函数在同一类中,则函数与函数之间,空一行。
    • 类和类之间,空两行

    注释

    修改代码同时修改相应的注释,保证注释与代码的一致性

    注释块:通常由一个或多个由完整句子构成的段落组成,每个句子应该以句号结尾。注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次。注释块中每行以’#‘和一个空格开始(除非他是注释内的缩进文本)。注释块内的段落以仅含单个’#'的行分割。注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段的注释)。

    行内注释:应该至少用两个空格和语句分开,它们应该以’#'和单个空格开始

    文档字符串:为所有公共模块,函数,类和方法编写文档字符串。文档字符串对非公开的方法不是必要的,但你应该有一个描述这个方法做什么的注释。 对单行的文档字符串,结尾的"""在同一行也可以。

    """
        训练
            数据预处理+正则化(归一化)
                用均值代替NaN
                删除行
            多个特 征全特征 (根据是否去掉某特征列)
        预测
            均值补全
            根据不同特征列进行模型选择 (缺失多的话去掉特征)
        因数据有些地方为空 可能多个SVM模型
    
        路线PCA/AutoEncoder+SVM(RBF)
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    标识符命名

    以下的命名风格是众所周知的:

    b(单个小写字母)
    B(单个大写字母)
    lowercase(小写)
    lower_case_with_underscores(有下划线的小写)
    UPPERCASE(大写)
    UPPER_CASE_WITH_UNDERSCORES(有下划线的大写)
    CapitalizedWords(或CapWords,CamelCase这样命名是因为可从字母的大小写分出单词)
    mixedCase (与CapitalizedWords的不同在于首字母小写!)
    single_trailing_underscore_(单个下划线结尾): 用于避免与Python关键词的冲突,例如:"Tkinter.Toplevel(master,class_='ClassName')"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    应避免的名字:永远不要用字符’l’(小写字母el(就是读音,下同)),‘O’(大写字母oh),或’I’(大写字母eye)作为单字符的变量名。在某些字体中这些字符不能与数字1和0分辨。试着在使用’l’时用’L’代替。

    模块名:模块应该是不含下划线的,简短的,小写的名字。

    类名:使用CapWords约定。内部使用的类外加一个前导下划线。

    函数名:应该为小写,可能用下划线风格单词以增加可读性。mixedCase仅被允许用于这种风格已经占优势的上下文(如:threading.py),以便保持向后兼容。

    如果一个函数参数名字包括保留的关键字,通常在参数末加上下画线,而不要使用简写,因此"print_" 要比"prnt"好一些

    模块导入

    通常应该在单独的行中导入(import),例如:
    No:
    import sys, os

    Yes:
    import sys
    import os

    但是这样也是可以的:
    from types import StringType, ListType

    Imports 通常被放置在文件的顶部,仅在模块注释和文档字符串之后,在模块的全局变量和常量之前。

    Imports应该有顺序地成组安放
    1、标准库的导入(Imports )
    2、相关的主包(major package)的导入(即,所有的email包在随后导入)
    3、特定应用的导入(imports)

    应该在每组导入之间放置一个空行

    表达式和语句

    紧挨着圆括号,方括号和花括号的,如:

    • Yes: spam(ham[1], {eggs: 2})
    • No: spam( ham[ 1 ], { eggs: 2 } )

    紧贴在逗号,分号或冒号前的,如:

    • Yes: if x == 4: print x, y; x, y = y, x
    • No: if x == 4 : print x , y ; x , y = y , x

    紧贴着函数调用的参数列表前开式括号(open parenthesis )

    • Yes: func(1)
    • No: func (1)

    紧贴在索引或切片,开始的开式括号前的,如:

    • Yes: dict[‘key’] = list[index]
    • No: dict [‘key’] = list [index]

    另外:
    1、始终在这些二元运算符两边放置一个空格:赋值(=), 比较(==,<,>,!=,<=,>=,in,not in,is,is not),布尔运算 (and,or,not)。 始终保持二元运算符两边空格的一致。

    submitted += 1
    
    • 1

    2、不要在用于指定关键字参数或默认参数值的’='号周围使用空格。

    Yes:
              def complex(real, imag=0.0):
                  return magic(r=real, i=imag)
    
    No:
              def complex(real, imag = 0.0):
                  return magic(r = real, i = imag)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    其他建议

    1、单个元素(singletons)的比较,如None 应该永远用:'is’或’is not’来做。当你本意是"if x is not None"时,对写成"if x"要小心。例如当你测试一个默认为None的变量或参数是否被设置为其它值时,这个值也许在布尔上下文(Boolean context)中是false!

    2、对象类型的比较应该始终用isinstance()代替直接比较类型,例如:

    • No: if type(obj) is type(1)
    • Yes: if isinstance(obj, int):

    3、对序列,(字符串,列表,元组),使用空列表是false这个事实,

    • Yes: if not seq:
      if seq:
    • No: if len(seq)
      if not len(seq)

    4、不要用==来比较布尔型的值以确定是True或False:

    • Yes: if greeting:
    • No: if greeting == True:
    • Worse: if greeting is True:

    END

  • 相关阅读:
    docker 中安装mysql详解
    MySQL学习笔记(十三)count(*),count(id),count(1),count(字段)区别
    RabbitMq高级特性-2
    Tomcat 启动闪退问题解决方法
    数据仓库之BI
    从零开始:PRD产品需求文档怎么写
    Java高级编程----集合
    Python从入门到实践(七)函数
    盛元广通农业种子检测实验室信息化管理系统LIMS
    2.14 PE结构:地址之间的转换
  • 原文地址:https://blog.csdn.net/qq_40061206/article/details/127960668