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

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...