对一套源代码的规范和风格的讨论及优化改进

  我的工程实践是机器学习相关,因此我在GitHub上选了下面的源代码进行学习:https://github.com/WillKoehrsen/machine-learning-project-walkthrough

一、对源代码的分析

  1、目录结构

  该源代码使用Python语言,在jupyter notebook上编写。在文件目录下有auto_ml、data、deprecated、images四个文件夹和Machine Learning Project Part 1.ipynb、Machine Learning Project Part 2.ipynb、Machine Learning Project Part 3.ipynb等源代码文件,其中:

  文件夹auto_ml中存放的是管道程序;

  文件夹data中存放的是该项目的训练集和测试集等数据压缩包;

  文件夹deprecated中存放的是对数据进行探索的程序文件;

  文件夹images中存放的是该项目用到的图像文件。

  

  2、代码风格

  由于该项目没有使用类,所有暂不讨论类的相关问题。我们随机选取了源代码中的一段个函数实现代码。

  

  • 代码中实现不同功能的部分用空行隔开,并且在前面都有对本段功能描述的注释语句,清晰易懂;
  • 函数的命名和变量的命名都采用英文半拼+英文全拼且用下划线隔开的组合方式,容易理解该函数或变量表达的含义。但是命名并没有采用Python语言推荐的驼峰命名方式,虽然仍然清晰明了,不过还是建议改为驼峰命名方式;
  • 代码的缩进和空格的使用都符合Python的规范;
  • 由于Jupyter Notebook有独特的代码块编辑方式,可以插入注释说明性的代码块,这样代码的脉络就会更为清晰如下图所示:

  

  

  3、改进建议:

  

  • 如上图第9行代码所示,一行中写了两句代码,这是不规范的行为,建议改为每行一句代码;
  • 还有第2部分所描述的变量命名改为驼峰命名方式。

 二、总结同类编程语言或项目在代码规范和风格的一般要求

  通过对源代码的学习以及相关资料的查阅,下面对python语言的规范和风格做一下总结:

  1、注释的使用

  • 注释的使用在编程中非常重要,因为代码不仅仅是拿来给机器运行的,还是给自己或者别人看的;
  • 要用英文写注释;
  • 如果一个注释是一个短语或句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符;
  • 在修改代码的时候一定要同步更改注释,代码与注释矛盾会给阅读代码带来很大的困扰;
  • 尽量使用块注释,少使用行注释;
  • 避免没有必要的注释。

  2、缩进

  • 整齐的缩进会使得代码条理清楚,整洁易读;
  • 空格是首选的缩进方式,制表符只能用于与同样使用制表符缩进的代码保持一致,Python3不允许同时使用空格和制表符的缩进;
  • 每一级缩进使用4个空格。
  • 续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐;
  • 当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行;
  • 每行最大长度79,换行可以使用反斜杠,最好使用圆括号,换行点要在操作符的后边敲回车。

  3、空格的使用

  • 各种右括号前不要加空格;
  • 逗号、冒号、分号前不要加空格;
  • 函数的左括号前不要加空格。如Func(1);
  • 序列的左括号前不要加空格。如list[2];
  • 操作符左右各加一个空格,不要为了对齐增加空格;
  • 函数默认参数的赋值符左右省略空格;
  • 不要将多句语句写在同一行,尽管使用‘;’允许;
  • if/for/while语句中,即使执行语句只有一句,也必须另起一行。

  4、命名规范

  • 那些暴露给用户的API接口的命名,应该遵循反映使用场景而不是实现的原则
  • 永远不要使用字母‘l’(小写的L),‘O’(大写的O),或者‘I’(大写的I)作为单字符变量名。在有些字体里,这些字符无法和数字0和1区分,如果想用‘l’,用‘L’代替;
  • 模块应该用简短全小写的名字,如果为了提升可读性,可以用下划线;
  • 包命名尽量短小,使用全部小写的方式,不可以使用下划线;
  • 类名一般使用首字母大写的约定。在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。注意,对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量;
  • 类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线;
  • 因为异常一般都是类,所有类的命名方法也适用于异常。然而需要在异常名后面加上“Error”后缀(如果异常确实是一个错误);
  • 函数名应该小写,如果想提高可读性可以用下划线分隔;
  • 始终要将 self 作为实例方法的的第一个参数。始终要将 cls 作为类静态方法的第一个参数;
  • 常量通常定义在模块级,通过下划线分隔的全大写字母命名。例如: MAX_OVERFLOW 和 NUM。

原文地址:https://www.cnblogs.com/happyyouli/p/11660931.html

时间: 2024-08-30 11:45:26

对一套源代码的规范和风格的讨论及优化改进的相关文章

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

工程实践选题是数据获取相关的,这里选择分析一个微信公众号爬虫的源代码. 一.源代码目录结构 目录结构比较清晰 1.bin存放关键代码 2.docs存放说明文件,比如界面说明,安装说明,使用说明,环境说明等 3.wechat这里是爬虫管理的代码,比如数量控制,链接控制 4.wechatspider存放爬虫代码,url获取与解析等 5.其他 一些配置文件和readme 二 .命名规则 1.文件名 可以看到是小驼峰命名法,getNewIp.py中首个单词首字母,第二个单词开始每个单词的的首字母大写 2

C/C++源代码书写规范

C/C++源代码书写规范 1. 在.cpp的开头应有一段格式统一的说明,内容包括: a. 文件名 (FileName): b. 简短说明文件功能.用途 (Comment): c. 创建人 (Creater): d. 文件创建时间 (Date). 例: ////////////////////////////////////////// // // FileName: ***.cpp // Creator: piaocoder // Date: ****-**-** // Comment: ***

rest规范 ; restful 风格; gradel介绍 ; idea安装 ;

[说明]上午整理了一下心情:下午继续开始任务,了解了restful,知道了那个牛人的博士论文,下载了管理工具gradle,并且部署了环境:晚上安装了idea继承环境并且建了一个简单的gradle项目(对着教程第一次使用idea我也是需要适应半天) 一:今日完成 1)rest架构规范 2)idea环境安装 3)gradle插件使用 二:明日计划 1)建立自己的REST接口. 2)使用PostMan/dhc测试自己写的接口,确认接口可以正常使用. 3)任务二完成 三:疑难问题 restful架构搞的

PHP团队 编码规范 & 代码风格规范

一.基本约定 1.源文件 (1).纯PHP代码源文件只使用 <?php 标签,省略关闭标签 ?> : (2).源文件中PHP代码的编码格式必须是无BOM的UTF-8格式: (3).使用 Unix LF(换行符)作为行结束符: (4).一个源文件只做一种类型的声明,即,这个文件专门用来声明Class, 那个文件专门用来设置配置信息,别混在一起写: 2.缩进 使用Tab键来缩进,每个Tab键长度设置为4个空格: 3.行 一行推荐的是最多写120个字符,多于这个字符就应该换行了,一般的编辑器是可以设

SVN源代码管理规范

1. SVN 版本库结构构建 在大多数人眼中的Subversion,就是那个在代码里被叫做“Trunk”的东西.其实Subversion包含了更多的内容! 为了让你能够更加充分体会到Subversion的好处,本文将讨论如何搭建你的版本库结构. 正如你之前在Subversion的相关文章中看到的那样,Subversion最基本的结构由三个路径组成:branches,tag和trunk. 每个路径在Subversion里都可以单独签出. 1.1 Trunk 任何时候Trunk里包含的都是最新的开发

Windows客户端C/C++编程规范“建议”——风格

9 风格 9.1 优先使用匈牙利命名法 等级:[推荐] 说明:该方法由微软总设计师设计.Windows上编程最好遵从该标准.详细介绍见:http://zh.wikipedia.org/wiki/%E5%8C%88%E7%89%99%E5%88%A9%E5%91%BD%E5%90%8D%E6%B3%95 9.2 变量名结合使用匈牙利命名法和驼峰命名法 等级:[推荐] 说明:比如 int nMaxCount = 1;中变量前缀n表示int型变量,MaxCount是表意,其就是使用驼峰命名法(首字母大

ILBC 源代码 项目 规范

本文内容节选自 <D# 语法>   https://www.cnblogs.com/KSongKing/p/10704450.html    . 再谈谈 调试 的 问题, 调试, 是 IDE 的 部分, 作为一个 开放 自由 有生命力 的 语言平台, 是不应该 依赖于 IDE 的, 我们 欢迎 IDE 提供好的支持, 但是 语言平台 不应该 依赖于 IDE . 看看 宇宙第一 IDE 和 C# 的 关系 就知道了, 离开 Visual Studio , 怎么开发 .Net 程序? 这不可想象

Linux内核编程规范与代码风格

source: https://www.kernel.org/doc/html/latest/process/coding-style.html translated by trav, [email protected] 这是一篇阐述Linux内核编程代码风格的文档,译者以学习为目的进行翻译. 1 缩进 Tab的宽度是八个字符,因此缩进的宽度也是八个字符.有些异教徒想让缩进变成四个字符,甚至是两个字符的宽度,这些人和那些把 PI 定义为 3 的人是一个路子的. 注意:缩进的全部意义在于清晰地定义

最新出炉:25套扁平化风格的图标【免费下载】

大家都知道,扁平设计是现在网页设计领域的最新趋势.对于扁平设计的网页界面,几乎所有的网页设计元素,例如按钮,图标,导航栏等都是扁平风格的. 那么什么是扁平设计呢?扁平化网页设计是指设计形式摒弃了各式各样的纹理背景,摒弃文字阴影,盒阴影等等.扁平化设计将继续影响 Web 和移动设计行业.在这里, 25套免费的扁平图标为您未来的项目提供很好的素材. 您可能感兴趣的相关文章 让人爱不释手的13套精美网页图标素材 分享25套非常漂亮的免费网页图标素材 网页素材大宝库:50套精美的图标素材 分享20个非常