我的工程实践课题是《facering:头部3D建模以及面部表情追踪识别》,基于此课题,我找了一个类似此课题的demo并对其进行分析
1.(1)目录结构
该代码比较简单,所以只用到了一级目录
detect.py用于检测人的面部表情
shaders.py用于绘制头部的3D模型
shape_predictor_68_face_landmark.dat用于人物面部表情在模型上的重定向
(2)文件名/类名/函数名/变量名等命名风格
如图,不论是变量名还是函数名,命名都体现除了变量和函数的功能,比如变量face_detect就表明该变量用于人脸检测,代码的可读性很强
(3)接口定义规范
接口泛指把供给外界直接调用、使用、访问等并且无需知道其内部的具体逻辑结构的抽象函数。该demo中,接口都是以参数,返回值和抽象函数去定义的
(4)单元测试组织形式
因为是Python语言编写的代码,所以该项目的单元组织测试形式为一个窗口或者菜单
2.列举哪些做法符合代码规范和风格一般要求
该demo中文件名/类名/函数名/变量名等命名、接口定义规范和单元测试组织形式符合都代码规范和风格一般要求,尤其时它的函数名和变量名的命名,一目了然,让人一眼就明白该函数或者变量的功能是什么,清晰明了,代码的可读性很强
3.列举哪些做法有悖于“代码的简洁、清晰、无歧义”的基本原则,及如何进一步优化改进
该代码整体还是比较简洁的,没有冗余,但是关键之处缺乏注释,虽然函数名已经起到了解释该函数功能的作用,但是对于英文不太好的程序员来说代码的可读性还是不强,所以,改进方法为:每个功能函数应该添加相应的注释,描述该函数的功能以及逻辑结构,便于后期运维人员对代码的维护和更新优化
4.该类代码的规范和风格
(1)语言规范
imports 仅仅用做包和模块的导入,包的导入每个尽量独占一行
packages 导入模块尽量使用模块的全路径
Exceptions 必须小心使用
Global variables 避免使用全局变量
lambda 函数仅仅适用于一行代码能实现的简单函数
True or False 尽量使用[],'',{},0,None来隐式表示False
(2)风格规范
代码编排:
1 缩进:4个空格实现缩进,尽量不使用Tab,禁止混用Tab和空格
2 行:每行最大长度不超过79,换行可以使用反斜杠(\)。最好使用圆括号将换行内容括起来,不建议使用“;”
3 空行:类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
4 空格:括号内的第一个位置,不要空格。紧靠右括号的位置也不要空格。冒号(:)、逗号(,)、分号(;)之前不要加空格。
5 括号:对于单元素tuple一定要加,和括号
(3)命名规范:
module_name
package_name
ClassName
method_name
ExceptionName
function_name
GLOBAL_CONSTANT_NAME
global_var_name
instance_var_name
function_parameter_name
local_var_name
(4)其它建议:
1. 字符串拼接,尽量使用join。使用str的方法而不是内置方法。使用startswith或endswith拉检查前缀和后缀
2. 单例对象,尽量使用is 、is not,不要使用==
3. 使用is not而不是not is
4. 使用def来定义函数,而不是将匿名函数赋给某个变量
5. 尽量使代码整齐,简洁
6. 使用isinstance()来判断instance的类型