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


Written with StackEdit.

python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准的更多相关文章

  1. python coding style guide 的高速落地实践

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

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

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

  3. Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字

    想要快速的学会一个Python的模块和方法,两个函数必须要知道,那就是dir()和help() dir():能够快速的以集合的型式列出该模块下的所有内容(类.常量.方法)例: #--encoding: ...

  4. PSR-2 Coding Style Guide

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

  5. The OpenCV Coding Style Guide

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

  6. 一张图总结Google C++编程规范(Google C++ Style Guide)

    Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...

  7. electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  8. PEP8中文版 -- Python编码风格指南

    Python部落组织翻译, 禁止转载 目录      缩进      制表符还是空格?      行的最大长度      空行      源文件编码      导入      无法忍受的      其 ...

  9. Python: 设计模式 之 工厂模式例(2)(神奇的Python)

    #!/usr/bin/env python #coding=utf-8 # # 工厂模式第二例(神奇的Python) # 版权所有 2014 yao_yu (http://blog.csdn.net/ ...

随机推荐

  1. Any Video Converter Pro for Mac注册码

    Any Video Converter Pro for Mac注册码:name:www.macmofo.comsn:000016-D84U8Q-8BN16B-WP2BV6-9RA73A-X7D4V3- ...

  2. php删除目录及目录下的内容

    今天遇到一个问题: java写的API,ppt转图片生成的目录和文件 在使用php调用API完成后,再使用php进行删除时,遇到了删除失败的问题 部署的环境是Ubuntu 导致删除失败的原因是权限的问 ...

  3. css3网站响应式写法

    css3响应式写法因为media不支持ie9以下的浏览器 所有要加个判断<pre> <!-- 全部通用的 --><link rel="stylesheet&qu ...

  4. 直击JavaScript之面向对象

    有时候,我们使用电脑的时候,并不知道它的原理是什么,但是就是会使用他,这就是面向对象.同样的,在JavaScript中也可使用这种原理,接下来就随我一起探索一下关于JavaScript面向对象的内容吧 ...

  5. 22 Maven高级应用

    1.Maven基础知识回顾 maven是一个项目管理工具.依赖管理:maven对项目中的jar包的管理过程.传统的工程我们直接将jar包放置到项目中. maven工程真正的jar包放置在仓库中,项目中 ...

  6. 长乐国庆集训Day2

    T1 连珠风暴 题目 [题目描述] 给定M种颜色的珠子,每种颜色珠子的个数均不限,将这些珠子做成长度为N的项链. 问能做成多少种不重复的项链.两条项链相同,当且仅当两条项链通过旋转或是翻转后能重合在一 ...

  7. gRPC-拦截器简单使用

    概述 gRPC作为通用RPC框架,内置了拦截器功能.包括服务器端的拦截器和客户端拦截器,使用上大同小异.主要作用是在rpc调用的前后进行额外处理. 从客户端角度讲,可以在请求发起前,截取到请求参数并修 ...

  8. Migrate to AndroidX 遇到的坑

    Androidx 迁移方法: 首先把 gradle 版本改为3.2.0以上,以及 compileSdkVersion 为28以上 然后 Android Studio 菜单栏 Refactor -> ...

  9. JMeter安装及简单应用示例

    一.Jmeter下载 官网地址:http://jmeter.apache.org/ 1.进入官网 2.选中一个版本下载 3.解压安装即可 二.Jmeter环境变量配置 1.   电脑桌面----> ...

  10. linux tomcat开机自启/nginx开机自启

    修改/etc/rc.d/rc.local文件,修改完成后需执行以下指令才能正常自启动 chmod +x /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS AD ...