Python最简编码规范

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 $"

Stay hungry. Stay foolish.

文章链接:https://www.cnblogs.com/Chayeen/p/8884776.html

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2018-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jackson0714

PHP内核之旅-3.变量

1064
来自专栏程序员的SOD蜜

在C++中反射调用.NET(二) 定义数据接口 绑定委托方法 使用SOD DTO 对象 将.NET对象转换到C++结构体为何不使用序列化的问题

反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET...

2027
来自专栏python3

python3--面向对象的三大特性:封装,property,classmethod,staticmethod

AttributeError: type object 'A' has no attribute '__N'

491
来自专栏机器学习和数学

[编程经验]python2和python3的区别总结

最近涨粉涨的厉害啊,那天看刚破800,今天打开又有32个新粉丝,有点开心,哈哈哈。说实话,看的人多的话,是我坚持下去最大的动力。。。 = = = print("...

2624
来自专栏技术专栏

慕课网Flask构建可扩展的RESTful API-6. 模型对象的序列化

我们最想做的一件事情,就是在视图函数中,读取出模型之后,还要把他的属性读出来,转换成一个字典。我们想直接jsonfiy(user)

1052
来自专栏智能算法

Python学习(一)---- Python基础必备

https://blog.csdn.net/fgf00/article/details/52061971

1263
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版3.4节栈布局之函数参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

341
来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch【正则搜索】分析&实践

在ES中有很多使用不是很频繁的查询,可以达到一些特殊的效果。比如基于行为路径的漏斗模型。本篇就从使用上讲述一下正则表达式查询的用法。 Regexp Que...

2108
来自专栏机器学习算法与Python学习

Python最简编码规范

1426
来自专栏恰同学骚年

正则表达式30分钟入门教程--deerchao

原文地址:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaoc...

1064

扫码关注云+社区