之前有总结过C++编程规范,但是现在遗留不多;目前根据Python代码经验,对Python编程进行总结
0、他山之石
1、代码撰写个人新心得
1.1、文件夹目录一定要写到 ‘/’ 为止;务必养成习惯,定义的文件夹全部写成这个格式
1.2、文件目录尽量写绝对路径,即使路径发生改变也很容易发现错误内容,相对路径的写法对debug不友好。###修改20200910-多用path.dirname来进行
2、强制性规范
2.1、类型命名
-
模块名尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多)
import spade
import background_enhance -
类名使用驼峰命名风格,首字母大写,私有类可用一个下划线开头
class FaceDetectClass():
pass -
函数名一律使用驼峰法则,与class保持一致(此部分参考c++文件规范);命名应该表明意图动作
def getDetect():
pass -
变量名尽量小写,常量采用全大写,如有多个单词,使用下划线隔开
school_name = ‘yuhong’
MAX_CONNECTION = 1000
2.2、导入包名顺序与准则
-
不要导入未被使用到的包名,减少工程冗余。
-
包名导入的顺序
a、python标准库模块
b、python第三方模块
c、应用程序自定义模块
使用一个空行分隔这三类模块的导入语句,确保模块使用固定的习惯导入,有助于减少每个模块需要的import语句数目
到底是导入包名还是导入包名里面的函数
- 每个导入应该独占一行
- 导入时不要使用相对名称,即使模块在同一个包中,也要使用完整包名,避免无意间导入一个包两次,或者他人不注意又导入一次
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy
from models.networks.base_network import BaseNetwork
2.3 空格与缩进
-
缩进:绝对避免使用Tab键来缩进
-
空行:方法定义,函数定义,类定义与第一个方法之间,都应该空一行
-
空格:
- 括号内不要有空格
yes: spam(ham[1], {eggs: 2}, [])
no: spam( ham[1], { eggs: 2}, [] )
-
不要在逗号,分号,冒号前面加空格,但应该在它们后面加(除了在行尾)
if x == 4:
print(x) -
参数列表,索引或切片的左括号前不应加空格
dict[‘key’] = list[index] -
当’='用于指示关键字参数或默认参数值时,不要在其两侧使用空格
def complex(real, imag=0.0): return magic(r=real, i=imag) -
在二元操作符两边都加上一个空格,比如赋值(=),比较(==, <, >, !=, <>,<=, >=, in, not in, is, is not),布尔(and, or, not)
- 括号内不要有空格
-
换行
-
使用反斜杠换行等应出现在行末;长字符串也可以用反斜杠换行
session.query(MyTable) /
filter_by(id=1) /
one() -
禁止复合语句,即一行中包含多个语句
do_first()
do_second()
do_third() -
if/for/while尽量换行,if后面接else一定要换行
if foo == ‘blah’:
do_blah_thing() -
第二行缩进到括号的起始处
-
foo = long_function_name(var_name, var_two,
var_three, var_four)