很多去 Google 参观的人,在用完洗手间后都有这样的疑惑,马桶前面的门上怎么会贴着 Python 编码规范?要知道,Google 对编码规范的要求极其严格,这也能从侧面说明编码规范的重要性。

对于编码规范的认知,很多初学者还仅停留在初级阶段,即只知道编码规范有用,比如命名时使用驼峰式的格式(如 TheFirstDemo),而至于为什么要求这样严格,就不是很清楚了。

  1. Python 编码规范到底有多么重要,它对于业务开发来说,究竟有哪些帮助?
  2. 有哪些流程和工具,可以强制你遵循规定好的编码规范呢?
  • 《8 号 Python 增强规范》,通常称之为 PEP8;
  • 《Google Python 风格规范》 简称为 Google Style,这是源自 Google 内部公开发布的社区版本,其目的是为了让 Google 旗下所有 Python 开源项目的编程风格统一。

以上这 2 个编码规范,Google Style 比 PEP8 更为严格,因为 PEP8 的主要面向群体是个人和小团队开发者,而 Google Style 则能够胜任大团队甚至是企业。

Python编码规范到底有多么重要

Python 编码规范重要性的原因用一句话来概括就是:统一的编码规范可以提高开发效率。

而影响开发效率的有 3 类对象,分别是阅读者、编程者和机器,它们的优先级是阅读者>>编程者>>机器(>>表示远远大于)。

阅读者>>编程者

写过代码的人应该深有体会,在实际工作中真正用来码代码的时间,远比阅读或者调试的时间要少。事实也是如此,有研究表明,软件工程中 80% 的时间都在阅读代码。

因此,如果想提高开发效率,首先要优化的不是码代码的速度,而是阅读代码的体验。

其实,很多编码规范本身就是为优化读者体验而存在的,拿命名原则来说,PEP8 第 38 条规定命名不能是无意义的单字母,有意义的名称可以很大程序提高阅读者的体验。

编程者>>机器

说完了阅读者的体验,再来聊聊编程者的体验。笔者常常见到的一个错误倾向就是过度简化自己的代码,这样做会大大降低代码的可阅读性,并且一旦出现 BUG,也不容易检查出来。

例如,阅读如下这行程序:

result = [(x, y) for x in range(10) for y in range(5) if x * y > 10]

上面这行代码还可以改写成如下这种形式:

result = []for x in range(10): for y in range(5): if x * y > 10: result.append((x, y))

对比这 2 种写法,显然后者调理更清楚,更容易理解,编写起来也更轻松。

机器体验也很重要

每个人都希望自己编写的代码能正确、高效地在电脑上执行,但是一些危险的编程风格,不仅会影响程序的正确性,也容易成为代码效率的瓶颈。

例如,PEP8 和 Google Style 都特别强调了,何时使用 is, 何时使用 ==,何时使用隐式布尔转换。不仅如此,Google Style 2.8 还对遍历方式的选择作出了明确限制。

在编程过程中,只要严格遵守编码规范,编写出的代码通常都很健壮,可移植性也很高。

编码规范的自动化工具

既然编码规范的终极目标是提高开发效率。所以,如果每次写代码都需要在代码规范上额外花很多时间,就达不到我们的初衷了。

首先,你需要根据自己的具体工作环境,选择或者制定适合自己公司或团队的编码规范。市面上可以参考的规范,也就是在文章开头提到的 PEP8 和 Google Style。

要知道,没有放之四海而皆准的规范,我们必须要因地制宜。例如在 Google 中,因为历史原因 C++ 不使用异常,引入异常对整个代码库带来的风险已经远大于它的益处,所以在它的 C++ 代码规范中,禁止使用异常。

一旦确定了整个团队所遵从的编码规范,就一定要强制执行,有什么好的办法呢?靠强制代码评审和强制静态或者动态 linter。具体流程是:

  1. 在代码评审工具里,添加必须的编码规范环节;
  2. 把团队确定的代码规范写进 Pylint 里,能够在每份代码提交前自动检查,不通过的代码无法提交。

整合之后,你的团队工作流程就会变成图 1 所示的这样。

pep8 python 编码规范_编码规范的重要性相关推荐

  1. c++ doxygen 注释规范_[代码规范]Go语言编码规范指导

    本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一 ...

  2. mysql数据库开发规范_开发规范——MYSQL数据库

    数据库规范 这里主要针对mysql数据库,其他数据库也可以借鉴 表 1.统一使用表命名规范 表名规范:分层+项目名缩写+实体名(小写)[+下划线+实体名+rel] 例子 表名:bc_user 分层: ...

  3. python2字符串编码方式_编码方式的区别以及文本在python2中的应用

    背景: 文本以及字符串处理在网络应用中随处可见,面对不同的用户接口调用方,以及不同的我们需要调用的接口,可能都会有不一样的编码规范. 而我在以前的开发中,对于字符串的处理经常会是以猜的方式来处理,en ...

  4. jsp文件命名规范_代码规范整理

    我喜欢优雅和高效的代码.代码逻辑应当直截了当,叫缺陷难以隐藏:尽量减少依赖关系,使之便于维护:依据某种分层战略完善错误处理代码:性能调至最优,省的引诱别人做没规矩的优化,高出一对混乱来.整洁的代码只做 ...

  5. doxygen 注释规范_编程规范 - doxygen注释规范示例(C++)

    doxygen注释规范示例(C++) doxygen能根据code的注释自动生成code的帮助文档,并且doxygen是一个跨平台的开源的软件,但是要生成帮助文档,code内的注释必须按一定规则书写. ...

  6. java编码技巧_编码小技巧 让java编程更便捷

    经过一段时间的编码,程序员们或多或少会形成自己的编码习惯,好的习惯能帮助自己写出更好的代码,方便程序的维护.抱着侥幸心理,对"可能会出错"的代码没有做"防错性程序设计&q ...

  7. gb50243-2016通风与空调工程施工质量验收规范_【规范】现行建筑标准规范集合:(六)专业工程...

    [提醒:代码为蓝色的可查询(后期将逐步完善链接查询)](请关注公众号或点六.专业工程1.自动化仪表工程施工及质量验收规范(GB 50093-2013)2.火灾自动报警系统施工及验收规范(GB 5016 ...

  8. java emoji编码转换_编码:unicode、utf-8以及emoji

    之前对emoji没怎么关注过,只有大约印象和编码有关,今天花了一点时间去看了一下emoji如何编码的. 先贴个知乎回答-Unicode 和 UTF-8 有什么区别? - 邱昊宇的回答 - 知乎 里面涉 ...

  9. 金蝶k3单据编码规则_编码规则

    1.名称: 设置编码规则名称 2.描述: 设置编码规则描述 3.允许修改: 支持手工输入编号 4.默认规则: 设置默认的一套规则 5.支持补号: 运行时支持手动补号,勾选后[允许修改]复选框字动勾选, ...

最新文章

  1. ASP.NET实现数据图表
  2. python基础代码事例-python基础示例
  3. springboot配置文件加载位置
  4. C++字符串反转(C++11)
  5. 最后一块石头的重量II
  6. 最长升序子串1231
  7. 深入浅出强化学习_直播 | 深入浅出理解 A3C 强化学习
  8. Oracle 索引概述
  9. 【飞秋】Asp.net MVC2 model验证 看似美好,实则让人失望。
  10. gnome扩展_GNOME桌面的12个扩展
  11. 储粮过冬?消息称中芯国际大举向设备、零件商囤货
  12. java对象命名用变量_在Java语言中,所有的变量、常量、对象和类都是用【 】来命名的。...
  13. 不需要appuploader破解版,也能上架
  14. 服务器宽带估算及选择
  15. 苹果电脑双系统虚拟机怎么安装?
  16. 前端必备:六款CSS工具让代码充满魅力
  17. 企业cc邮箱发件服务器设置,C#发送邮件(阿里企业邮箱示例 包括各个类型的服务器及端口配置)...
  18. SSH 3次失败自动封锁IP
  19. TopoJSON格式规范说明
  20. 服务器没有显示器能接笔记本吗,笔记本能连显示器吗_笔记本能不能接显示器...

热门文章

  1. 双非硕士阿里大数据开发面经(已拿offer)
  2. jeecg 与 jeecg-p3有什么区别?
  3. Linux常用命令(第二版) --文件管理命令
  4. Android Studio 3.0 下 Cordova 打包时 Gradle 兼容性问题解决
  5. 甲骨文推出新的云服务 协助企业顺利迁移至云端
  6. 说一说技术和管理……
  7. SQL Server下载安装
  8. JAVA API----Date类
  9. 对Lucene PhraseQuery的slop的理解
  10. mysql 实现master-slave 同步