python coding style guide 的高速落地实践


机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding style的自己主动检查。


1.有哪些著名的Python Coding Style Guide

  • PEP8

https://www.python.org/dev/peps/pep-0008/

发明Python语言丰碑人物Guido van Rossum的亲自写的Coding Style, 知名度5颗星,可操作性5颗星。

  • Google Python Coding Style Guide

http://google-styleguide.googlecode.com/svn/trunk/pyguide.html

Google内部广泛使用Python作为开发语言,此Coding Style 在坊间流传非常广。知名度5颗星,可操作性5颗星。

值得一提的是Guido也以前在Google工作过一段时间。

2.Flake8 - Coding Style检查自己主动化的利器

你可能听说过pep8。这是一个依据PEP8规范检查python代码style的自己主动化工具。

flake8是对pep8进行了包装,充分发挥了插件化的优势。添加了如代码复杂度,函数、变量命名习惯,import顺序等检查。

2.1 安装Flake8

安装flake8。同一时候安装一些实用的插件。

  • pep8-nameing

https://github.com/PyCQA/pep8-naming

命名检查

  • flake8-import-order

https://github.com/public/flake8-import-order

import 顺序检查。能够有两种风格顺序检查cryptography, google。如google的意思是import顺序是(1)标准库(2)第三方库(3)本地项目库。代码检查时能够通过--import-order-style=google来指定。

  • flake8-todo

https://github.com/schlamar/flake8-todo

检查代码中的todo。

  • flake8-quotes

https://github.com/zheller/flake8-quotes/

检查单双引號的使用是否正确。

详细安装命令例如以下:

$ pip install flake8
$ pip install pep8-naming
$ pip install flake8-import-order
$ pip install flake8-todo
$ pip install flake8-quotes

检查安装了哪些插件:

$ flake8 --version
# 输出例如以下内容,显示了已安装的插件:
2.5.1 (pep8: 1.5.7, import-order: 0.6.1, naming: 0.3.3, pyflakes: 1.0.0, mccabe: 0.3.1, flake8-todo: 0.4, flake8_quotes: 0.1.1) CPython 2.6.6 on Linux

2.2 用Flake8检查Python Codes

比如例如以下代码:

# test.py

from order import place_order
import os, sys class website_api(object):
def __init__(self):
self.user_name = ''
self.Gender = 'male'
#comment in wrong ident
self.active =False def login(self, Person):
self.user_name=Person.user_name
not_used_var = 0
return True def Logout(self):
self.active =False def place_order(self):
place_order() def action():
Client_a = website_api()
Client_a.login()
Client_a.place_order()
Client_a.Logout()

运行检查命令:

$ flake8 --first --import-order-style=google test.py

输出结果例如以下,你能够依据错误码来修正代码,如当中的N802的意思是function name不应该包括大写英文字母。

# flake8 output
test.py:2:1: F401 'sys' imported but unused
test.py:2:1: I100 Imports statements are in the wrong order. from os, sys should be before from order
test.py:2:1: I201 Missing newline before sections or imports.
test.py:2:10: E401 multiple imports on one line
test.py:4:7: N801 class names should use CapWords convention
test.py:8:9: E265 block comment should start with '# '
test.py:9:22: E225 missing whitespace around operator
test.py:11:9: N803 argument name should be lowercase
test.py:13:9: F841 local variable 'not_used_var' is assigned to but never used
test.py:16:9: N802 function name should be lowercase
test.py:23:5: N806 variable in function should be lowercase

除此之外。flake8也能够递归得检查某个文件夹中的代码:

$ flake8 your_project_dir

flake8经常使用的options有:

  • –show-source

show source code for each error

  • –first

show first occurrence of each error

  • –import-order-style=google

import order style to follow

  • –count

print total number of errors and warnings to standard error and set exit code to 1 if total is not null

  • –help

get help

2.3 Flake8 Warning / Error codes 列表

Codes Notes Link
E***/W*** pep8 errors and warnings http://pep8.readthedocs.org/en/latest/intro.html#error-codes
F*** PyFlakes codes (see below) https://flake8.readthedocs.org/en/latest/warnings.html
C9** McCabe complexity, 眼下仅仅有C901 https://github.com/PyCQA/mccabe
N8** PEP-8 naming conventions https://github.com/PyCQA/pep8-naming#plugin-for-flake8
I*** checks the ordering of your imports https://github.com/public/flake8-import-order#warnings
T*** 眼下仅仅有T000检查代码中是否包括TODO, FIXME https://github.com/schlamar/flake8-todo
Q*** 眼下有Q000代表单双引號使用错误 https://github.com/zheller/flake8-quotes/

随着新的flake8 plugin的集成,还可能有其它的codes,假设你的项目有特殊的代码检查需求。也可开发自己的plugin。

2.4 Flake8的个性化配置

依据须要,flake8的配置能够是全局的(对全部project有效)。也能够是分project的。这里仅举例说明全局配置方法。分project配置请见flake8 Per Project Configuration

编辑 ~/.config/flake8

[flake8]
ignore = E201,E202,E302
exclude = .tox,*.egg
max-line-length = 120

以上配置的意思是flake8不检查E201, E202, E302这三个错误,不检查.tox,*.egg文件。同意的最长单行代码长度为120个字符。

2.5 Flake8高级使用方法 - Git Commit Hook

flake8可结合Git实现commit时检查coding style的目的,假设flake8报错,则无法commit

在python project的根文件夹下运行例如以下命令安装git pre-commit hook。

$ flake8 --install-hook
$ git config flake8.strict true

References

  1. PEP8

    https://www.python.org/dev/peps/pep-0008/

  2. Google Python Coding Style

    http://google-styleguide.googlecode.com/svn/trunk/pyguide.html

  3. pep8工具

    https://github.com/PyCQA/pep8

  4. flake8

    https://flake8.readthedocs.org

  5. Warning / Error codes of flake8

    https://flake8.readthedocs.org/en/latest/warnings.html

python coding style guide 的高速落地实践的更多相关文章

  1. python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准

    python coding style guide 的快速落地实践 机器和人各有所长,如coding style检查这种可自动化的工作理应交给机器去完成,故发此文帮助你在几分钟内实现coding st ...

  2. Google coding Style Guide : Google 编码风格/代码风格 手册/指南

    1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...

  3. PSR-2 Coding Style Guide

    本文主要是对PSR-2 的简单翻译. 英文源址 http://www.php-fig.org/psr/psr-2/ PSR2继承和扩展PSR1--基本编码规范 本手册的目的是使用一系列共同遵守的编码格 ...

  4. The OpenCV Coding Style Guide

    https://github.com/opencv/opencv/wiki/Coding_Style_Guide

  5. PEP 8 – Style Guide for Python Code

    原文:PEP 8 – Style Guide for Python Code PEP:8 题目:Python代码风格指南 作者:Guido van Rossum, www.yszx11.cnBarry ...

  6. [Guide]Google Python Style Guide

    扉页 项目主页 Google Style Guide Google 开源项目风格指南 - 中文版 背景 Python 是Google主要的脚本语言.这本风格指南主要包含的是针对python的编程准则. ...

  7. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  8. Google's C++ coding style

    v0.2 - Last updated November 8, 2013 源自 Google's C++ coding style rev. 3.274 目录 由 DocToc生成     头文件   ...

  9. Google Shell Style Guide

    转自:http://google.github.io/styleguide/shell.xml Shell Style Guide Revision 1.26 Paul Armstrong Too m ...

随机推荐

  1. pat 团体天梯赛 L2-002. 链表去重

    L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除 ...

  2. POJ2478 Farey Sequence

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15023   Accepted: 5962 Description The ...

  3. UnionFind(PYthon实现)

    UnionFind用于解决图的连通性问题,不需要给出具体路径的情况,可用来计算连通分支数 参考链接: https://blog.csdn.net/dm_vincent/article/details/ ...

  4. Eigen--简单的C++矩阵计算库

    晚上突然想写一段小C++程序,要用到矩阵求逆呀乘法呀之类的,所以找了一下有什么现成的可用的C++矩阵计算相关的库,发现有一大堆,在其中各种各样的配置,感觉比较麻烦.从方便性来说Eigen是最方便的了, ...

  5. hdu 3074(线段树)

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  6. LeetCode OJ--Binary Tree Zigzag Level Order Traversal *

    https://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ 树的层序遍历 使用两个 stack 或者 vect ...

  7. 16Aspx.com-将15位身份证转换成18位

    //********************************************************************************* //将15位身份证转换成18位时 ...

  8. Cryptography I 学习笔记 --- 总结

    在b站上大概的看完了Dan Boneh的密码学,对现代密码学总算有了一个粗浅的认识. 总算能在纸上手写RSA公式并且证明之了,蛤蛤. 总体的感触就是,现代密码学是一个非常博大精深的体系,我等程序员最重 ...

  9. Azure CDN 服务详解

    Azure CDN概述   Azure CDN(内容分发网络)是一种用于分发高带宽内容的全球CDN解决方案,它可以托管在Azure中,也可以通过在任何其他位置,借助Azure CDN,可以托管到任何其 ...

  10. 树(tree)

    树(tree)[题目描述]从前在森林里面有一棵很大的树,树上住着很多小动物.树上有