前言

项目中代码风格规范的好处:

好处1:代码风格的统一可以很好地提高代码的可读性。制定一个相同的代码风格,如直接选用Python的PEP8官方风格指南,严格遵守后可以得到美观又统一风格的项目代码,这在多人协作的开发中是很有必要的,每个人编写代码的习惯不一样,特别是有些喜欢用一些奇怪或新奇的写法,这样可读性很差。尤其是灵活的脚本语言Python、JS等,越是灵活越需要规范,代码更多是写给人看,而不是仅仅给机器跑而已。实际上Github上稍微正规的项目都有自己的项目代码规范,如果没有显式标注,那便是默认使用官方的风格指南。Python的PEP8规范很详细,作为语言本身重要的补充,规范是代码简洁美观的有力保障。

好处2:可以发现隐藏的bug。代码风格如果规范得好(像PEP8),是可以发现代码中潜藏的bug的,比如未定义的变量,定义了变量却没使用,变量覆盖等等,当代码量越来越大,况且单元测试不完善的时候,代码规范检查可以发现一些基础的不良写法,发现隐藏的bug。(还是那句话,人都是不可靠的,总会有疏忽)

好处 3:可以稍微提高性能。比如定义的变量未使用,引入的模块未使用等,会造成额外的性能消耗和代码冗余,代码规范可以方便地检查出来。

代码规范的检查最好是做到自动化,最少也要配置快捷使用方式。可以使用flake8和autopep8等检查规范和自动格式化代码的工具,很多IDE和编辑器都可以配置插件和快捷使用方式。Python中最专业最强大的IDE当数Pycharm,可以配置「External Tools」,Sublime之类的编辑器也可以方便地配置插件。

即便有工具可以检查和格式化代码,但自己平时编写代码时最好还是按照规范来编写,第一工具并非万能,不能过分依赖;第二是按照规范来编写本来就是一个习惯问题,养成好习惯,也就离编写漂亮又优雅代码的目标不远了。

正文

一 代码编排

1 缩进。4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格。

2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。

3 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。

二 文档编排

1 模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。

2 不要在一句import中多个库,比如import os, sys不推荐。

3 如果采用from XX import XX引用库,可以省略"module.’,都是可能出现命名冲突,这时就要采用import XX。

三 空格的使用

总体原则,避免不必要的空格。

1 各种右括号前不要加空格。

2 逗号、冒号、分号前不要加空格。

3 函数的左括号前不要加空格。如Func(1)。

4 序列的左括号前不要加空格。如list[2]。

5 操作符左右各加一个空格,不要为了对齐增加空格。

6 函数默认参数的赋值符左右省略空格。

7 不要将多句语句写在同一行,尽管使用";’允许。

8 if/for/while语句中,即使执行语句只有一句,也必须另起一行。

四 注释

总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!

注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。

1 块注释,在一段代码前增加的注释。在"#’后加一空格。段落之间以只有"#’的行间隔。

2 行注释,在一句代码后加注释。比如:x = x + 1 # Increment x

但是这种方式尽量少使用。

3 避免无谓的注释。

五 文档描述

1 为所有的共有模块、函数、类、方法写docstrings;非共有的没有必要,但是可以写注释(在def的下一行)。

2 如果docstring要换行,参考如下例子,详见PEP 257

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

六 命名规范

总体原则,新编代码必须按下面命名风格进行,现有库的编码尽量保持风格。

1 尽量单独使用小写字母"l’,大写字母"O’等容易混淆的字母。

2 模块命名尽量短小,使用全部小写的方式,可以使用下划线。

3 包命名尽量短小,使用全部小写的方式,不可以使用下划线。

4 类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。

5 异常命名使用CapWords+Error后缀的方式。

6 全局变量尽量只在模块内有效,类似C语言中的static。实现方法有两种,一是__all__机制;二是前缀一个下划线。

7 函数命名使用全部小写的方式,可以使用下划线。

8 常量命名使用全部大写的方式,可以使用下划线。

9 类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。

9 类的属性有3种作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public属性前,前缀一条下划线。

11 类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。

12 为避免与子类属性命名冲突,在类的一些属性前,前缀两条下划线。比如:类Foo中声明__a,访问时,只能通过Foo._Foo__a,避免歧义。如果子类也叫Foo,那就无能为力了。

13 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。

七 编码建议

1 编码中考虑到其他python实现的效率等问题,比如运算符"+’在CPython(Python)中效率很高,都是Jython中却非常低,所以应该采用.join()的方式。

2 尽可能使用"is’"is not’取代"==’,比如if x is not None 要优于if x。

3 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。

4 异常中不要使用裸露的except,except后跟具体的exceptions。

5 异常中try的代码尽可能少。比如:

try:

value = collection[key]

except KeyError:

return key_not_found(key)

else:

return handle_value(value)

要优于

try:

# Too broad!

return handle_value(collection[key])

except KeyError:

# Will also catch KeyError raised by handle_value()

return key_not_found(key)

6 使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。比如

Yes: if foo.startswith("bar’):优于

No: if foo[:3] == "bar’:

7 使用isinstance()比较对象的类型。比如

Yes: if isinstance(obj, int): 优于

No: if type(obj) is type(1):

8 判断序列空或不空,有如下规则

Yes: if not seq:

if seq:

优于

No: if len(seq)

if not len(seq)

9 字符串不要以空格收尾。

10 二进制数据判断使用 if boolvalue的方式。

python编码规范手册-python 编码规范整理相关推荐

  1. python编码规范手册-python之(8)Python编码规范整理

    我是用Python的IDE:pycharm来编写Python代码的,用IDE编写代码有一个好处就是语法高亮,智能提示.Python的代码样式规范称之为PEP 8规范,每次编写代码如果有出现不符合PEP ...

  2. python基础语法手册-python语法手册

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 常用的也不超过十个,这种相对于更为复杂的html标记语言来说,markd ...

  3. python基础语法手册-Python学习手册(第4版)pdf

    Python学习手册(第4版) 内容简介 <Python学习手册(第4版)>学习Python的主要内建对象类型:数字.列表和字典.使用Python语句创建和处理对象,并且学习Python的 ...

  4. python编码规范手册-Python官方竟然给出了一种编码规范PEP 8

    写在之前 每个人都有自己的代码风格,随着写的行数增加,自己对于代码的审美也会变的不一样,这就像是一个逐渐蜕变的过程,每过一段时间回头再去看看自己之前写的代码就会生出一种「这么丑的玩意儿竟然是我写的」这 ...

  5. python编码规范手册-python编码规范

    此时你已经可以写一个更长更复杂的 Python 程序,是时候讨论一下 编码风格 了.大多数语言可以写(或者更明白地说, 格式化 )作几种不同的风格.有些比其它的更好读.让你的代码对别人更易读是个好想法 ...

  6. python基础语法手册-python语法大全,python语法手册

    deff(x,y=0,z=0):pass 定义一个有三个参数x,y,z的函数f,参数x是必须要赋值,比如f(1),f(x=1),都是给x赋值1,y,z也是需要赋值,但不是必须的,因为默认值已经在函数里 ...

  7. python免费入门手册-Python 基础入门教程

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. <Python 基础入 ...

  8. python免费入门手册-python基础入门手册。。。。。。

    面向过程 以指令为中心,有指令处理数据 如何组织代码解决问题 面向对象 以数据为中心,所有的数据代码都围绕数据展开 如何设计数据结构,并且提供对此类 tuple元组:() list列表:[] dict ...

  9. Web 前端开发规范手册

    Web 前端开发规范手册 一.规范目的 1.1 概述 二.文件规范 2.1 文件命名规则 2.2 文件存放位置规范 2.3 CSS 书写规范 基本原则: 注意细则: 命名规则: id的命名: 基本样式 ...

最新文章

  1. step在c语言中什么作用,C语言step-by-step(二)(数据类型)
  2. Spring AOP实现原理解析
  3. CentOS 6.3安装Nginx开启目录浏览、下载功能
  4. mysql按字段拆分表_MYSQL命令怎么实现将表中某个字段中多个记录拆分,急求答案!...
  5. mysql内连接和外连接的区别_数据库左连接、右连接、内连接、全连接区别
  6. codeforces1013E - DP
  7. 手把手编写自己的PHP MVC框架实例教程
  8. Leetcode题目:Binary Tree Paths
  9. How to make an app
  10. 用例设计-常用正交表9个
  11. 『已解决』IIS启动 服务无法在此时接受控制信息
  12. 谷歌Adsende中的 CPC、CTR、PRM含义
  13. python3结果窗口打开_python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法...
  14. 车载摄像头软件的技术分布
  15. [PHP+HTML] - DEDECMS模板制作教程
  16. mac软件App Cleaner Uninstaller Pro 7.6.2 中文直装版 (应用深度清理卸载工具)
  17. 【iOS】iOS马甲包制作+OC、Swift垃圾代码生成脚本
  18. U盘安装系统时需要用到的快捷启动热键一览 欢迎补充
  19. 常见的数据通信方式有哪些?
  20. 嵌入式测试自动化框架搭建

热门文章

  1. Problem 5 素数筛法+并查集
  2. 面向对象(面向对象设计,面向对象编程,实例变量)
  3. 开源Python做的火币和ZB搬砖差价监控程序
  4. Reverse Engineering Custom DataTypes - GUID() in SQL Server to PostgreSQL
  5. AXIS2整合spring需要的jar,以及大部分缺少jar所报的异常
  6. IOS高级开发 runtime(一)
  7. power designer 设计数据库生成到oracle数据库
  8. JavaScript 中创建三种消息框:警告框、确认框、提示框
  9. python医学科研中能做什么-非结构化数据-病历智能处理引擎的设计、实现和应用...
  10. python语言入门与精通-Python从入门到精通