Python标准库中的编码风格整理
创始人
2024-02-05 03:57:19
0

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

缩进

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

折叠长行

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

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

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

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

行间距

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

注释

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

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

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

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

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

标识符命名

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

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')"

应避免的名字:永远不要用字符’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

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、单个元素(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

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...