根据工程实践题目,我在GitHub上找到了一份选题相关的代码,其使用的编程语言为Python。
源代码目录结构
首先,可以看到这份代码的目录结构,总体来说,是比较清晰明确的。
- 作者提供了README.md文件以供第一次阅读这份代码的人快速弄清组织代码的结构。
- 主要实现逻辑和功能的代码,都是以.py结尾的python文件。
- 除此之外,faster_rcnn_inception_v2_coco_2018_01_28、ssd_mobilenet_v1_coco_2018_01_28、object_detection三个文件夹放的是这份代码运行所依赖的库。
- result_images、test_images、test_videos存放的是图片和视频数据
- data中的数据主要为文本形式的标记(label)、物体状态(name)、id和它们之间的映射
文件名
作者的文件名使用了下划线命名法,代码的文件名以单词+下划线组成,文件包含的单词的含义就指明了这份文件主要的工作,比如:“multi_object_tracking”就表示进行多对象目标的跟踪。其命名格式是值得学习的,但在命名含义上存在一些问题:
- 这里的第一个问题是,几个文件名的描述有点类似,“multi_object_tracking.py”和“multi_track_detection.py”就无法通过文件名本身来分清它们的功能,因为它们的描述太相近了。
- 另外,文件名有的是对方法的描述,有的是对功能的描述。例如:”detection.py“是用Faster-Rcnn方法对目标进行检测,但文件名只提到了”检测“,而camshift2.py使用的是mean-shift方法,但没有提到这份代码是用来做目标跟踪的。
具体的改进方式,可以将文件名以”使用方法“+”实现功能“进行命名描述,这样会让看代码的人一目了然。
变量名
打开这套代码的主运行文件:multi_track_detection.py。首先看变量定义的区域:
- 作者在前面给了关于这个代码文件”在干什么“的说明
- 变量的命名全部都是字母大写并且单词间以下划线隔开的,这些变量相当于常量,不再更改,所以用全大写字母来进行强调。这里变量和变量对应含义的映射是很清楚的
- 每一个变量的定义前都有中文的注释,再次说明变量意义
- 在代码编辑规范和风格上,双目运算符两边用了空格,逗号、冒号等符号后也用了空格,括号中各行之间保持了4个空格的缩进,使得代码整体比较简洁美观
函数
函数的命名依旧是单词+下划线的形式,非常清楚地表达了函数在做什么。函数体内的缩进和空格,以及注释都非常合理。但唯一不足的一点在于代码显得非常拥挤,让看代码的心情感到很压抑。
可以有如下的改进方式:
- 编写函数时,按照一个事物正常的逻辑处理顺序进行编写,避免造成不断的“回溯阅读”
- 考虑加入适当的空行:1、将变量声明、定义与处理代码逻辑部分分开 2、将函数内部各个逻辑相对独立的子部分的代码块隔开
总结
经过阅读这套代码和之间编程的经验,可以总结出代码规范和风格上的一些一般要求:
- 定义变量后要空行,尽可能的在定义变量的同时初始化该变量,即遵循就近原则
- 每个函数定义结束后都要加空行。两个相对独立的程序块,变量说明之后必须加空行
- 关键字之后要有空格,函数名之后不要留空格,应跟紧“(”,以与关键字区别
- “,”之后要留空格。如果“;”不是一行的结束符,其后要留空格
- 双目运算符前后应适当的加空格("%d"除外),单目运算符前后不加空格
- 大括号{}分别要独占一行,互为一对要位于同一列,并且引用他们的语句左对齐
- {}之内的代码要缩进一个Tab,同一地位要左对齐,地位不同的继续缩进
- 注释只是提示不是文档。多重嵌套,段落结束处要注释。宏定义右边一定要有注释,说明作用
分析一套源代码的代码规范和风格并讨论如何改进优化代码
原文:https://www.cnblogs.com/jaroo/p/11664560.html