python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准
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
Google Python Coding Style http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
Warning / Error codes of flake8 https://flake8.readthedocs.org/en/latest/warnings.html
Written with StackEdit.
python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准的更多相关文章
- python coding style guide 的高速落地实践
python coding style guide 的高速落地实践 机器和人各有所长,如coding style检查这样的可自己主动化的工作理应交给机器去完毕,故发此文帮助你在几分钟内实现coding ...
- Google coding Style Guide : Google 编码风格/代码风格 手册/指南
1 1 1 https://github.com/google/styleguide Google 编码风格/代码风格 手册/指南 Style guides for Google-originated ...
- Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字
想要快速的学会一个Python的模块和方法,两个函数必须要知道,那就是dir()和help() dir():能够快速的以集合的型式列出该模块下的所有内容(类.常量.方法)例: #--encoding: ...
- PSR-2 Coding Style Guide
本文主要是对PSR-2 的简单翻译. 英文源址 http://www.php-fig.org/psr/psr-2/ PSR2继承和扩展PSR1--基本编码规范 本手册的目的是使用一系列共同遵守的编码格 ...
- The OpenCV Coding Style Guide
https://github.com/opencv/opencv/wiki/Coding_Style_Guide
- 一张图总结Google C++编程规范(Google C++ Style Guide)
Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...
- electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google JavaScript Style Guide代码规范
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...
- PEP8中文版 -- Python编码风格指南
Python部落组织翻译, 禁止转载 目录 缩进 制表符还是空格? 行的最大长度 空行 源文件编码 导入 无法忍受的 其 ...
- Python: 设计模式 之 工厂模式例(2)(神奇的Python)
#!/usr/bin/env python #coding=utf-8 # # 工厂模式第二例(神奇的Python) # 版权所有 2014 yao_yu (http://blog.csdn.net/ ...
随机推荐
- java HttpClientHelper
1 首先配置pom.xml,具体参考我的这篇文章:使用httpclient需要的maven依赖 2 上代码 import java.io.IOException; import java.io.Inp ...
- 如何利用Docker构建基于DevOps的全自动CI
来自用户的DevOps实践分享,分享从开发代码到生产环境部署的一条龙操作的实践及经验, 包含工具技术的选型及考量.私有代码库与私有镜像库的应用等. (一)容器服务的Rancher选型 1.为什么说是下 ...
- navcat excel数据导入mysql的方法
navcat excel数据导入mysql的方法 先navcat导出 xls格式 然后把数据复制到往这个xls里 (按照这个xls格式) 然后导入mysql就行了 如果导入的过程无法识别excel里的 ...
- window安装mysql8.0解决大部分客户端无法连接问题登陆问题
https://blog.csdn.net/u013308810/article/details/80114021
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...
- shared_ptr 用法
引入 shared_ptr 是c++为了提高安全性而添加的智能指针,方便了内存管理. 特点 shared_ptr 是通过指针保持对象共享所有权的智能指针.多个 shared_ptr 对象可占有同一对象 ...
- day26——tyoe元类与object的联系、反射、函数与方法的区别、双下方法
day26 type元类与object联系 type 获取对象从属于的类 python 中一切皆对象, 类在某种意义上也是一个对象,python中自己定义的类,以及大部分内置类,都是由type元类(构 ...
- Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传
视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...
- Python 基础 编码
Python 基础 编码 咱们的电脑,存储和发送文件,发送的是什么?电脑里面是不是有成千上万个二极管,亮的代表是1,不亮的代表是0,这样实际上电脑的存储和发送是不是都是010101啊 我们发送的内容都 ...
- Python输错4次用户名密码需要输入验证码
time = 0 login_success = False USER_NAME = "alex" PWD = "alex123" CHECK_CODE = & ...