Python最简编码规范 - 机器学习算法与Python学习

  • https://mp.weixin.qq.com/s/i6MwvC4jYTE6D1KHFgBeoQ
  • https://www.cnblogs.com/Chayeen/p/8884776.html

0、前言

本文是阅读《Python Coding Rule》之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考。

1、重要原则

a.保持风格的一致性很重要,但最重要的是:知道何时不一致
b.打破一条既定规则的两个好理由:
c.当应用规则会导致代码可读性下降(可读性赛高)
d.为了和周围代码保持一致而打破规则(历史遗留)

2、最简规范

a.只使用空格缩进
b.使用UTF-8编码
c.每行只写一条语句
d.使用行末反斜杠折叠长行,限制每行最大79字符
e.导入包:每行唯一、从大到小、绝对路径
f.类内方法空1行分隔,类外空2行分隔
g.运算符除 * 外,两边空1格分隔,函数参数=周围不用空格
h.除类名使用驼峰法以外,其他模块、函数、方法、变量均使用全小写+下划线
i.1个前导下划线表示半公开,2个前导下划线表示私有,与保留字区分使用单个后置下划线
j.开发时使用中文注释,发布时再写英文文档

3、详细规范

a.全文通用
b.只使用空格缩进,4个空格表示1个缩进层次
c.每行长度限制在79字符内,使用行末反斜杠折叠长行
d.使用UTF-8编码
e.每行只写一条语句

4、代码命名

一行只import一个包,Imports的顺序为:标准库、相关主包、特定应用,每组导入之间放置1行空行,所有导入使用包的绝对路径。

分割顶层函数和类的定义使用2行空行,分割类内方法定义使用1行空行,class行与第一个方法定义之间要有1行空行。

整体使用英文书写方式来使用空格,即仅在逗号、分号后面添加1个空格,其他任何符号如圆括号、方括号、花括号等都不用空格把符号与字符分开,写在一起表示一个整体;运算符除 * 号以外,其他符号两边都各用1个空格分隔;函数参数=号周围不用空格。

模块名:不含下划线、简短、全小写;

类名、异常名:首字母大写单词串的驼峰法;

函数名、全局变量名、方法名、实例变量:全小写,加下划线增加可读性;

一个前导下划线仅用于不想被导入的全局变量(还有内部函数和类)前加一个下划线)、不打算作为类的公共接口的内部方法和实例变量;

两个前导下划线以表示类私有的名字,只用来避免与类(为可以子类化所设计)中的属性发生名字冲突。

私有属性必须有两个前导下划线,无后置下划线;

非公有属性必须有一个前导下划线,无后置下划线。

公共属性没有前导和后置下划线,除非它们与保留字冲突,此情况下,单个后置下划线比前置或混乱的拼写要好,例如:class_优于klass。

5、编写技巧

与None之类的单值比较,永远用:'is'或'is not'来做:if x is not None

在模块和包内定义基异常类(base exception class)

使用字符串方法(methods)代替字符串模块。

在检查前缀或后缀时避免对字符串进行切片,用startswith()和endswith()代替,如:No: if foo[:3] == 'bar':Yes: if foo.startswith('bar'):

只用isinstance()进行对象类型的比较,如:No: if type(obj) is type(1):Yes: if isinstance(obj, int)

判断True或False不要用 ==,如:No: if greeting == True:Yes: if greeting:

6、注释

开发时,注释全部用中文来写,当要发布脚本工具时,再写英文文档。

注释应该是是完整的句子(短语也可),首字母大写;如果注释很短,省略末尾句号;注释块由一个or多个完整句子构成的段落组成,则每个句子使用句子结尾;句末句号后使用两个空格。

注释块每行以#和一个空格开始,并且跟随注释的代码具有相同的缩进层次,注释块上下方有一空行包围。

谨慎使用行内注释,至少使用两个空格与语句分开。

使用 pydoc; epydoc; Doxgen 等文档化工具,为所有公共模块、函数、类和方法边写文档字符串,文档字符串对非公开的方法不是必要的,但你应该有一个描述这个方法做什么的注释,这个注释应该在"def"这行后。

多行文档字符串结尾的""" 应该单独成行。

版本注记:定义一个变量__version__ = "$Revision: 1.4 $"

学习笔记之Python最简编码规范的更多相关文章

  1. Python最简编码规范

    前言 本文是阅读<Python Coding Rule>之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考. ...

  2. Noah的学习笔记之Python篇:命令行解析

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  3. Noah的学习笔记之Python篇:函数“可变长参数”

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  4. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  5. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  6. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  7. Python 常用 PEP8 编码规范

    Python 常用 PEP8 编码规范 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPLE: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  8. 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接

    [学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...

  9. UFLDL深度学习笔记 (五)自编码线性解码器

    UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...

随机推荐

  1. Python的文件处理

    引子 1.问题:给你一个文件 "兼职白领学生空姐模特护士联系方式.txt" ,如何查看内容? 答: 安装文本编辑器软件 选中右键,利用文本编辑器软件打开 查看 or 写入 保存,关 ...

  2. 容器(container)

    一.容器有哪些 平时我们经常看到各种容器名称:Servlet容器.WEB容器.Java WEB容器.Java EE容器等 二.容器是什么 2-1     容器通常理解就是装东西的,我们这里说技术上的容 ...

  3. Unity API 解析 (陈泉宏著)

    1 Application类 2 Camera类 3 GameObject类 4 HideFlags类 5 Mathf类 6 Matrix4x4类 7 Object类 8 Quaternion类 9 ...

  4. Dynamics CRM Solution

    Default solution Dynamics comes pre-loaded with a Default Solution Contains all the base objects, en ...

  5. Python time & datetime模块

    time 模块 时间分为三种格式: 时间戳:表示1970年1月1日之后的秒 结构化时间:元组包含了:年.日.星期等... 格式化字符串:格式可以自定义 时间戳: import time time_st ...

  6. idea 中maven编译速度过慢的问题的解决

    解决方案一 在创建Maven项目时加上 archetypeCatalog=internal 参数,如下: 解决方案二 在maven的VM Options加上-DarchetypeCatalog=int ...

  7. webpack 中的 chunk 种类

    webpack 将 chunk 划分为三类: 入口 chunk.入口 chunk 包含 webpack runtime 和将要加载的模块. 普通 chunk.普通 chunk 不包含 webpack ...

  8. 怎么理解Python画图中的X,y

    X_outliers=np.array([[3.4, 1.3], [3.2, 0.8]]) y_outliers=np.array([0, 0]) 要明白X,y不再是我们高中时候学的x,y轴的坐标:首 ...

  9. 基于openresty的https配置实践

    最近机器人项目的子项目,由于和BAT中的一家进行合作,人家要求用HTTPS连接,于是乎,我们要改造我们的nginx的配置,加添HTTPS的支持. 当然了,HTTPS需要的证书,必须是认证机构颁发的,这 ...

  10. Excel技巧--批量生成指定名称的文件夹

    当我要按excel表当中的名字来批量生成文件夹时,手动一个个制作很麻烦(特别是成百上千个时).于是我们可以这么做: 1.在名字右侧建立公式:"MD "&A2. 2.将公式拖 ...