【Tool】Python 代码规范

在业务能力中,尽可能保持clean code 不仅仅是视觉上更容易自己理解,逻辑和代码呈现保持一致性和明确性,在公司/组织中进行Code review和项目移交时也更加顺利,代码规范化不仅包括代码本身格式上的标准和一些便于理解的命名规范,更重要的是代码注释文档能力。本文主要参考博客、PEP8标准和 clean code 一书。

PEP8标准

PEP8 是Python 主要版本的标准库代码书写规范。

Ref:PEP8规范CSDN博客

PEP8主要包括以下几个部分:

  1. Code lay-out,代码布局,包括缩进、换行、空行和空格。

  2. Comment, 代码注释和文档说明

  3. Naming norm,变量和函数命名规范

  4. Other, 编程建议

代码布局

Tab和空格

空格是首选的缩进方式。 制表符只能用于与同样使用制表符缩进的代码保持一致。 Python3不允许同时使用空格和制表符的缩进。 混合使用制表符和空格缩进的Python2代码应该统一转成空格。

Max Line Length

79,限制编辑器窗口宽度可以使多个文件并行打开,并且在使用代码检查工具(在相邻列中显示这两个版本)时工作得很好。

Blank Line

顶层函数和类的定义,前后用两个空行隔开。 类里的方法定义用一个空行隔开。 相关的功能组可以用额外的空行(谨慎使用)隔开。一堆相关的单行代码之间的空白行可以省略(例如,一组虚拟实现 dummy implementations)。 在函数中使用空行来区分逻辑段(谨慎使用)。

注释规范化

  • 与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更新对应的注释!

  • 注释应该是完整的句子。如果一个注释是一个短语或句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。 如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。

  • 在句尾结束的时候应该使用两个空格。 当用英文书写时,遵循Strunk and White (译注:《Strunk and White, The Elements of Style》)的书写风格。

  • 请使用英文写注释。

关于The element of style书写风格见文档2.

命名规范化

那些暴露给用户的API接口的命名,应该遵循反映使用场景而不是实现的原则。

命名方式有:

以下是常见的命名方式:

  • b(单个小写字母)

  • B(单个大写字母)

  • lowercase 小写字母

  • lower_case_with_underscores 使用下划线分隔的小写字母

  • UPPERCASE 大写字母,多用于常量

  • UPPER_CASE_WITH_UNDERSCORES 使用下划线分隔的大写字母

  • CapitalizedWords(或者叫 CapWords,或者叫CamelCase 驼峰命名法 —— 这么命名是因为字母看上去有起伏的外观)。有时候也被称为StudlyCaps。 注意:当在首字母大写的风格中用到缩写时,所有缩写的字母用大写,因此,HTTPServerError 比 HttpServerError 好。 另外,下面这种用前缀或结尾下划线的特殊格式是被认可的(通常和一些约定相结合):

  • _single_leading_underscore:(单下划线开头)弱“内部使用”指示器。比如 from M import * 是不会导入以下划线开始的对象的。

  • single_trailing_underscore:(单下划线结尾)这是避免和Python内部关键词冲突的一种约定,比如:Tkinter.Toplevel(master, class=’ClassName’)

  • __double_leading_underscore:(双下划线开头)当这样命名一个类的属性时,调用它的时候名字会做矫正(在类FooBar中,__boo变成了_FooBar__boo;见下文)。

  • __double_leading_and_trailing_underscore__:(双下划线开头,双下划线结尾)“magic”对象或者存在于用户控制的命名空间内的属性,例如:__init__,__import__或者__file__。除了作为文档之外,永远不要命这样的名。

  1. 避免大写的O和小写的l

  2. 变量名驼峰命名,尽量不要下划线

  3. 函数名全小写,可以加下划线

  4. 包名模块名全小写

  5. 始终要将 self 作为实例方法的的第一个参数。 始终要将 cls 作为类静态方法的第一个参数。

  6. 防止冲突+_

Readme规范化

参考了Python 标准库,keras,pytorch,OpenAI的NES实现,一个readme开发文档应该包括如下部分,

  1. Title and demo

  2. Installation and Dependency

  3. Usage

  4. Contributing or bug or user chat

  5. Copyright or License

  6. Update log

如果是实现、用法型的应该包括

  1. File Tree

  2. Function Describtion

  3. Quickly overall

  4. API

模板

DEMO
===========================
#### Describution
​
Eg. This repository contains PyTorch implementations of deep reinforcement learning algorithms and environments.
Eg. keras-rl implements some state-of-the art deep reinforcement learning algorithms in Python and seamlessly integrates with the deep learning library Keras.
​
Furthermore, keras-rl works with OpenAI Gym out of the box. This means that evaluating and playing around with different algorithms is easy.
​
Of course you can extend keras-rl according to your own needs. You can use built-in Keras callbacks and metrics or define your own. Even more so, it is easy to implement your own environments and even algorithms by simply extending some simple abstract classes. Documentation is available online.
​
#### Dependency
node v0.10.28+
redIs ~
​
#### Installation
1\. 添加系统环境变量
 export $PORTAL_VERSION="production" // production, test, dev
​
​
2\. npm install  //安装node运行环境
​
3\. gulp build   //前端编译
​
4\. 启动两个配置(已forever为例)
 eg: forever start app-service.js
 forever start logger-service.js
#### Usage/Example
​
​
#### File Tree
├── Readme.md                   // help   
├── app                         // 应用   
├── config                      // 配置   
│   ├── default.json   
│   ├── dev.json                // 开发环境   
│   ├── experiment.json         // 实验   
│   ├── index.js                // 配置控制   
│   ├── local.json              // 本地   
│   ├── production.json         // 生产环境   
│   └── test.json               // 测试环境   
├── data   
├── doc                         // 文档   
├── environment   
├── gulpfile.js   
├── locales 
├── logger-service.js           // 启动日志配置   
├── node_modules   
├── package.json   
├── app-service.js              // 启动应用配置   
├── static                      // web静态资源加载   
│   └── initjson   
│       └── config.js         // 提供给前端的配置   
├── test   
├── test-service.js   
└── tools   
​
​
​
#### V1.0.0 Update log
1\. New Func    aaaaaaaaa
2\. New Func     bbbbbbbbb
3\. New Func     ccccccccc
4\. New Func     ddddddddd
​
#### Reference
#### Contributing
#### Copyright/Licence

规范化工具

Black

pip intsall black
black main.py
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341