• 分析一套源代码的代码规范和风格并讨论如何改进优化代码


    我的工程实践课题是《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的类型

        

     

     

  • 相关阅读:
    .NET数据库编程求索之路6.使用ADO.NET实现(三层架构篇使用List传递数据基于存储过程)(1)
    【转】模板化的单例模式
    .NET数据库编程求索之路7.使用ADO.NET实现(工厂模式实现多数据库切换)(1)
    【转】VC++项目中stdafx.h的作用
    【转】用oledb读取dbf文件报错--“外部表不是预期的格式” [
    【转】ADO.Net连接DBF文件
    【转】可能继承的C++ Singleton基类
    .NET数据库编程求索之路6.使用ADO.NET实现(三层架构篇使用List传递数据基于存储过程)(2)
    .NET数据库编程求索之路4.使用ADO.NET实现(三层架构篇使用Table传递数据)(3)
    RMAN>干掉热备份#OCP试验1#
  • 原文地址:https://www.cnblogs.com/ustc314/p/11649582.html
Copyright © 2020-2023  润新知