python通用规范-1

文章目录

1.1 缩进
1.1.1 程序块采用4个空格缩进风格编写
1.1.2 禁止混合使用空格(`space`)和跳格(`Tab`)
1.1.3 新项目必须使用纯空格(`spaces`)来代替跳格(`Tab`)
1.2 语句
1.2.1 Python文件中必须使用UTF-8编码
1.2.2 一行只写一条语句
1.2.3 相对独立的程序块之间、变量说明之后必须加空行
1.2.4 一行长度小于80个字符,与Python标准库看齐
1.3 空格
1.3.1 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符前后要加空格
1.3.2 进行非对等操作时,如果是关系密切的立即操作符(如`.`)后不应加空格
1.4 导入
1.4.1 加载模块必须分开每个模块占一行
1.4.2 导入部分(imports)置于模块注释和文档字符串之后,模块全局变量和常量声明之前
1.4.3 避免使用`from xxx import *`的方式导入某模块的所有成员
1.1 缩进

1.1.1 程序块采用4个空格缩进风格编写

说明:程序块采用缩进风格编写,缩进的空格数为4个,是业界通用的标准。
# 错误示例:空格个数不为4个
def load_data(dirname, one_hot=False):
X_train = [] # 5个空格
Y_train = [] # 5个空格

# 正确示例:
def load_data(dirname, one_hot=False):
X_train = []
Y_train = []
1
2
3
4
5
6
7
8
9
1.1.2 禁止混合使用空格(space)和跳格(Tab)

说明:推荐的缩进方式为仅使用空格(space)。仅使用跳格(Tab)也是允许的「但不推荐」。如果已有代码中混合使用了空格及跳格,要全部转换为空格。
# 错误示例:空格和跳格混合使用
def load_data(dirname, one_hot=False):
X_train = [] # 跳格 Tab
Y_train = []

# 正确示例:
def load_data(dirname, one_hot=False):
X_train = []
Y_train = []
1
2
3
4
5
6
7
8
9
1.1.3 新项目必须使用纯空格(spaces)来代替跳格(Tab)

说明:对于新项目,必须使用纯空格(spaces)来代替跳格(Tab)。
# 错误示例:新项目使用跳格
def load_data(dirname, one_hot=False):
X_train = [] # 跳格
Y_train = [] # 跳格

# 正确示例:
def load_data(dirname, one_hot=False):
X_train = []
Y_train = []
1
2
3
4
5
6
7
8
9
1.2 语句

1.2.1 Python文件中必须使用UTF-8编码

说明:Python文件中应该使用UTF-8编码(Python2.x中默认使用ASCII编码, Python3.x默认使用UTF-8编码), 使用ASCII或UTF-8的文件必须有编码声明. 另外使用x转义字符是在字符串中包含非ASCII(non-ASCII)数据的首选方法.
1.2.2 一行只写一条语句

说明:不允许把多个短语句写在一行中,即一行只写一条语句。多条语句写在一行,这样做一个很明显得缺点就是在调试的时候无法单步执行。
# 错误示例:多条语句在一行,不方便单步调试
rect.length = 0; rect.width = 0;

# 正确示例:
rect.length = 0
rect.width = 0
1
2
3
4
5
6
1.2.3 相对独立的程序块之间、变量说明之后必须加空行

说明:相对独立的程序块之间、变量说明之后加上空行,代码可理解性会增强很多。
# 错误示例:程序块之间未加空行
if len(deviceName) < _MAX_NAME_LEN:
……
writer = LogWriter()

# 正确示例:
if len(deviceName) < _MAX_NAME_LEN:
……

writer = LogWriter()
1
2
3
4
5
6
7
8
9
10
1.2.4 一行长度小于80个字符,与Python标准库看齐

说明:建议开发团队用本产品线的门禁工具或者yapf(https://github.com/google/yapf) 自动格式化,或者用IDE自带的格式化功能统一格式化代码后再提交。
较长的语句、表达式或参数(>80字符)要分成多行书写,首选使用括号(包括{},[],())内的行延续,推荐使用反斜杠()进行断行。长表达式要在低优先级操作符处划分新行,操作符统一放在新行行首或原行行尾,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
# 错误示例:一行字符太多,阅读代码不方便
if width == 0 and height == 0 and color == 'red' and emphasis == 'strong' and highlight > 100:
x = 1

# 正确示例:
if (width == 0
and height == 0
and color == 'red'
and emphasis == 'strong'
and highlight > 100):
x = 1
1
2
3
4
5
6
7
8
9
10
11
1.3 空格

1.3.1 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符前后要加空格

说明:采用这种松散方式编写代码的目的是使代码更加清晰。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留一个以上空格。
1、逗号、分号(假如用到的话)只在后面加空格。

# 错误示例:
print(a,b , c)

# 正确示例:
print(a, b, c)
1
2
3
4
5
2、比较操作符">"、">="、"<"、"=<"、"==", 赋值操作符"="、"+=",算术操作符"+"、"-"、"%",逻辑操作符and, or等双目操作符的前后加空格。
错误示例:

if current_time>= MAX_TIME_VALUE:
a=b+ c
a+=2
1
2
3
正确示例:

if current_time >= MAX_TIME_VALUE:
a = b + c
a += 2
1
2
3
1.3.2 进行非对等操作时,如果是关系密切的立即操作符(如.)后不应加空格

1、函数定义语句中的参数默认值,调用函数传递参数时使用的等号,建议不加空格

def create(self, name=None):
pass

self.create(name="mike")
1
2
3
4
2、 *、**等作为操作符时,前后不加空格。

# 错误示例:
a = b * c
a = c ** b

# 正确示例:
a = b*c
a = c**b
1
2
3
4
5
6
7
3 、.前后不加空格。

# 错误示例:
result. writeLog()

# 正确示例:
result.writeLog()
1
2
3
4
5
4、括号内侧,左括号后面和右括号前面,不需要加空格,多重括号间不必加空格。

# 错误示例:
a = ( (b + c)*d - 5 )*6

# 正确示例:
a = ((b + c)*d - 5)*6
1
2
3
4
5
5、紧贴索引切片或被调用函数名,开始的括号前,不需要加空格。

# 错误示例:
Dict [key] = list [index]
conn = Telnet.connect (ipAddress)

# 正确示例:
dict[key] = list[index]
conn = Telnet.connect(ipAddress)
1
2
3
4
5
6
7
1.4 导入

1.4.1 加载模块必须分开每个模块占一行

说明:单独使用一行来加载模块,让程序依赖变得更清晰。
# 错误示例:
import sys, os

# 正确示例:
import sys
import os
1
2
3
4
5
6
1.4.2 导入部分(imports)置于模块注释和文档字符串之后,模块全局变量和常量声明之前

说明:导入部分(imports)置于模块注释和文档字符串之后,模块全局变量和常量声明之前。导入(import)库时,按照标准库、第三方关联库、本地特定的库/程序顺序导入,并在这几组导入语句之间增加一个空行。
# 正确示例:
import sys
import os
from oslo_config import cfg
from oslo_log import log as logging
from cinder import context
1
2
3
4
5
6
1.4.3 避免使用from xxx import *的方式导入某模块的所有成员

说明:from xxx import *会将其他模块中的所有成员挨个赋值给当前范围的同名变量,如果当前范围已经有同名变量,则会静默将其覆盖。这种方式容易导致名字冲突,且冲突后不容易定位,应当尽量避免使用。
正确示例: 如果需要使用yyy,则
from xxx import yyy

———————————————

A thousand journey is started by taking the first step.
原文地址:https://www.cnblogs.com/chengjian-physique/p/14995368.html