蛙蛙推荐:如何编写高质量的python程序
蛙蛙推荐:如何编写高质量的python程序 - 蛙蛙王子 - 博客园
蛙蛙推荐:如何编写高质量的python程序
如何编写高质量的python程序
目录
- 代码规范
- 空白项目模版
- 单元测试
- 文档
- 打包
- 小结
代码规范
首先阅读下面的两份规范,并深入理解。
- Python社区官方建议采用的Python编码风格:PEP8 中文版
- Google SoC 建议的 Python 编码风格:Google Python Style Guide 中文版
写出规范的代码是写出高质量代码的第一步,并且有助于培养仔细的习惯。
为了培养规范写代码的习惯,可以安装flake8这个工具,它不仅可以检查代码风格是否符合官方建议(PEP8),而且还能找出潜在的隐患(用Pyflakes做语法分析),更逆天的是还能检测到你有些函数写的太复杂(代码圈复杂度)了,更更逆天的是可以设置git commit之前必须通过这些检查。
当然具体操作需要根据自己的项目进行一些定制,比如可以忽略E501,W293。
空白项目模版
好的开始是成功的一半,写python代码就从pyempty开始吧。
在github上看一下那些经典的项目,web.py,flask, pep8,他们的项目目录都很规范,综合借鉴了一些项目的特点,我写了这个pyempty项目。
- README.md 这里写你项目的简介,quick start等信息,虽然distutils要求这个文件没有后缀名,但github上如果后缀是.md的话可以直接转换成html显示。
- ChangeLog.txt 该文件存放程序各版本的变更信息,也有一定的格式,参考web.py的ChangeLog.txt
- LICENES.txt 这里存放你项目使用的协议,不要编写自己的协议。
- requirements.txt 如果你的项目需要依赖其它的python第三方库,在这里一行一个写出来,可能pip install的时候能自动帮你安装
- setup.py 安装脚本,后面详细介绍
- docs 里面存放你的项目文档,如概要设计,详细设计,维护文档,pydoc自动生成的文档等,强烈推荐大家使用MarkDown格式编写文档
- src 这个目录里存放项目模块的主要代码,尽量不要把模块目录直接放到根目录,模块代码目录可以在setup.py里指定的
- tests 这个目录存放所有单元测试,性能测试脚本,单元测试的文件确保以test_做前缀,这样distutils会自动打包这些文件,并且用
python -m unittest discover -s ./ -p 'test_*.py' -v
可以直接执行这些测试单元测试
Martin Fowler:"在你不知道如何测试代码之前,就不该编写程序。而一旦你完成了程序,测试代码也应该完成。除非测试成功,你不能认为你编写出了可以工作的程序。"
我们有很多理由不写单元测试,归根结底是懒,虽然代码大全上说:
大部分研究都发现,检测比测试的成本更小。NASA软件工程实验室的一项研究发现,阅读代码每小时能够检测出来的缺陷要比测试高出80%左右(Basili and Selby 1987)。后来,IBM的一项研究又发现,检查发现的一个错误只需要3.5个工作时,而测试则需要花费15-25个工作时(Kaplan 1995)。
但是单元测试还是让别人相信你的代码有很高质量的最有力证据。
好了,请详细阅读:
- 深入python3.0: 单元测试-2.x也适用
- Unit testing framework 不完整中文版
文档
敏捷开发不是提倡什么文档也不写,没有文档就没有传承和积累,轮岗或新人接手任务就会遇到很大的麻烦,所以我决定每个项目最少要写以下文档:
- nalysis.model.md 概要设计文档,不同于README.md文件,该文档应该写于项目开发之前,把项目有哪些功能,大概分几个模块等项目整体概述信息写一下。
- design.model.md 详细设计文档,不用太详细,至少把项目依赖哪些东西,谁依赖这个项目,重要算法流程描述,代码整体结构等写出来。
- maintain.md 维护文档,这个我觉得最重要,你的服务都记录哪些日志,需要监控哪些业务指标,如何重启,有哪些配置项等,没这些东西,你的项目很难运维。
上面这些文档都是项目全局性的文档,不适合写在docstring或注视里,所以要有单独的文档。
打包
python有专门的模块打包系统distutils,你可以用这套机制把你的代码打包并分发到Pypi上,这样任何人都可以用pip或easy_install安装你的模块。
如果你开发的是内部项目,还可以用mypypi架设私有的pypi,然后把项目的大的版本更新发布到内部的pypi上,配置管理人员和运维人员可以很方便的从pypi上拉取代码安装到测试环境或生产环境。
发布大版本的时候要给版本命名及编写ChangeList,可以参考Git Pro的相关章节,主要记住以下几个命令。
git tag -a v0.1 -m 'my test tag' #给大版本命名,打Tag git describe master #给小版本命名,Git将会返回一个字符串,由三部分组成:最近一次标定的版本号,加上自那次标定之后的提交次数,再加上一段SHA-1值 git shortlog --no-merges master --not v0.1 #生成版本简报,ChangeList
python有自己的打包机制,所以一般不要用
git archive
命令。当然大版本管理用pypi管理比较合适,小的bug fix,紧急上线等好多公司都是用git直接从生产环境拉代码更新,因为git,svn等可以很方便的撤销某次更新,回滚到某个位置。
如何管理好大版本上线和小的紧急上线,我还没理清思路,欢迎大家参与讨论。
关于打包,请阅读如下链接:
- Python 打包指南
- 深入Python3.0:打包 Python 类库
- python打包:分发指定文件
小结
以上是最近学到的一些东西的总结,欢迎大家一起讨论。
转载于:https://www.cnblogs.com/lexus/archive/2013/01/05/2845119.html
蛙蛙推荐:如何编写高质量的python程序相关推荐
- 编写高质量代码改善程序的157个建议:第87个建议之区分WPF和WinForm的线程模型...
今天有时间了,继续<编写高质量代码改善程序的157个建议>的阅读,当我阅读到建议87的时候,里面的一些代码示例和文中所说的不一致了,是不是我现在用的是NetFramework 4.0的缘故 ...
- 推荐8本高质量的Python书籍,初学者必看
Python是一种多功能语言.它经常用作Web应用程序的脚本语言,嵌入到软件产品中,以及人工智能和系统任务管理.它既简单又强大,非常适合初学者和专业程序员. 今天,小千选择几本高质量的Python书籍 ...
- python经典好书-推荐几本高质量的Python书籍--附github下载路径
一 为什么要分享? 最近碰到了一些人和事,感触挺大的.就是发现很多类似自己的软件工程师,一旦工作三五年之后,工作中算是一个熟练工,但是进步的脚步突然慢了下来,虽然你在工作中仍旧很努力.到底是什么原因呢 ...
- 如何编写python函数_编写高质量的Python代码系列(二)之函数
Python中的函数具备多种特性,这可以简化编程工作.Python函数的某些性质与其他编程语言中的函数相似,但也有性质是Python独有的.本节将介绍如何用函数来表达亿图.提升可复用程度,并减少Bug ...
- 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)
读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...
- HTML Inspector – 帮助你编写高质量的 HTML 代码
HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...
- 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...
- 《编写高质量代码:改善c程序代码的125个建议》——第1章 数据,程序设计之根本建议1:认识ANSI C...
本节书摘来自华章计算机<编写高质量代码:改善c程序代码的125个建议>一书中的第1章,建议1,作者:马 伟 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第1 ...
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会 ...
最新文章
- 如何解决从数据库里面取出的时间晚了8个小时
- 从基础设施到云原生应用,全方位解读阿里云原生新锐开源项目
- 从微信红包的春节活动运营方案中,必读的运营策略
- ios无痕埋点_移动端无痕埋点实践详解(二)
- java+脚本+压枪,我的世界钓鱼脚本代码csgo压枪
- java html 生成 pdf_Java实现HTML代码生成PDF文档
- ostu进行遥感图像的分割
- xlsx文件打开乱码_Excel 2016 双击无法打开xlsx文件怎么办?
- c++ 高效入门_导学三章_第2章_强哥学Py_Python二级通关与实用入门_17讲
- java的学习步骤方法书籍大总结
- C++11/14学习(二)类型推导
- 【linux】xrander/cvt自定义分辨率
- 局域网计算机不能共享常见问题
- 智能家居有线系统KNX的介绍
- gmssl编译linux,linux 编译安装GmSSL记录
- Spring之事务管理与事务的传播特性
- OSPF--DR与BDR
- matlab 三角函数 积化和差,三角函数积化和差与和差化积公式
- fastadmin框架里基于x-editable实现的表格无刷新行内编辑功能的插件的‘datetime‘时间类型无法使用的解决方法
- 图片社交php,图像社交时代
热门文章
- 异贝,移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例42
- 海外社交媒体平台如何选择
- 电音(2)8-bit
- Occupancy Flow: 4D Reconstruction by Learning Particle Dynamics(2)
- 中秋节到了,为什么你不回家?
- 接入阿里云短信,OSS,实人认证
- 蜗牛星际修改82583V网卡MAC地址
- mysql创建、修改、删除索引和主键
- 计算机硬件故障注入,容错箭载计算机的硬件故障注入方法研究.pdf
- 一线城市广州,再次对“双一流”毕业生放宽落户条件