从开源项目看python代码注释

最近看了不少代码,也写了不少代码,所以在看和写之间发现了很多的问题,真的是很多,至少从我的认识来看,有几个地方有很大的改进空间,这里不准备把所有的问题都列举出来,所以就先挑选一个比较明显得来和大家聊聊。回顾流行开源项目的成功,除了功能上的刚需之外,文档也是必不可少的一个环节,没有良好文档的开源项目几乎不可能说是流行的,因为很少人会因为你说了一句使用我的项目就可以怎么怎么样就傻不溜秋得用你的。从我以前开源的项目中大家可能会发现一个比较大的问题就是文档工作做得确实不咋地。

项目中的文档我认为可以分为直接文档和间接文档两部分,直接文档就是 README/Read the docs 这类的可以直接阅读的文档,而间接文档就是代码中的注释了。别人在阅读你的项目的时候,首先,直接文档可以让大家对你的项目有一个直观的认识,知道你的项目是干嘛的,大概的实现思路/算法是怎样的;而代码注释就是别人在验证你的项目是否真如你文档所说,实现得是否良好的一种参考,所以两种文档都是很重要的。

在 Python 中,因为 docs comment 的存在,可以让这两种文档归一,其实就是将 comment 抽离出来转化为可以直接阅读的 Document,虽然这有点理想化,但是在一定程度上减少了我们编写文档的难度和复杂度。本文就如何编写这样的 Comment 进行一个简单的总结,同时也是对自己的一个改进。

Google coding-style guide

玩 Python 的同学应该都知道 Python 没有一个业界的代码规范,而 PEP8 这些也不并不能完全对我们的开发起到很好得规范和知道作用。反而,看现在很多人的代码,发现 google coding style 的接受度更高,所以,不妨多参考一些。

模块注释

在 Python 中,每个文件其实都是一个自成模块,所以我就称文件注释为模块注释,模块注释一般就是解释该模块是干嘛用的,以及如何使用该模块等信息,同时,在构建工具之后就变成了文档的主要内容了。不妨我们来看下 requests 的注释:

?

可以发现其实这份注释还是比较清晰的,可以分为几个部分,分别是:

  1. 功能介绍
  2. 使用 Demo 示例以及参数/返回值等
  3. 版权之类的说明

这算是一份比较标准化的注释了,至于注释的风格,我们可以参照 reStructuredText Primer 这份说明进行练习。

类注释

类的注释的话又稍微复杂一些,除了必要的类说明和使用示例之外,你还需要对类的够赞函数进行参数描述,因为 python 的构造函数是 __init__,而我们通常文档是直接看类的说明,所以这里写在类上很重要!如果你的类存在必要的公共属性,需要对外暴露出来,那么也应该标注出来。我们可以参考一下 Flask 的示例:

?

前面洋洋洒洒得写了很多说明,然后后面就对构造函数的参数进行了描述。

函数注释

函数的注释应该是最复杂的,因为我们不仅仅最函数的功能进行描述,还要关注函数的参数和返回值,参数又需要描述参数的意义,还要描述参数的类型,返回值也是如此,所以我们也来看看 Celery 的一个示例:

?

这里只有对函数的解释,注意事项还有返回值,除此之外,我们还经常用的有:

  • Args
  • Returns
  • Raises

?

从源码构建文档

当我们将我们的源码的注释都注释得七七八八了,觉得是时候编一份文档看看效果如何了,那么你是应该看看下面的介绍啦!

当然,我还是参考一些流行项目的做法,看看人家的文档是怎么做的,说实话,我看过的这么多个项目的文档中,Flask 确实是写得比较好的,当然,Django 的也是不错,不过它的文档过于人工修饰,从源码中还原度没有那么高。所以这里我以 Flask 为例来看看开源项目是如何做注释文档化的。

要想了解自然先尝试一遍,不是太麻烦,将 Flask 的源码 clone 下来之后,只需要简单得使用 make docs,稍等片刻,你就讲得到 docs 的编译版本,默认你会得到 html 版本,位置就在源码目录的 _build/html 目录下。但是,看看 Makefile 再看看 docs 目录你可能又会疑惑,因为 docs 里面已经放置了 rst 文件了,所以这个时候的问题就是如何从 py 文件中抽离 rst 文件!

其实这些问题对于一些工具来说都是很简单的,Flask 用的是 sphinx,这个工具被 Python 世界的大多数开源项目所青睐,所以也成为了一个事实上的文档标准。使用 sphinx 可以让我们轻松得解决两个问题:

  • 抽离 python 注释
  • 将代码文档化

操作过程只是两句命令就可以解决的问题:

  • 将代码中的文档注释抽离出来:sphinx-apidoc -F -o docs flask
  • 将文档转换成 html 形式:sphinx-build -b html . _build/html
    • 或者在第一步的基础上更直接点:make html

这样,你就将你之前的努力都转化成可以被人直观接受的文档了!这里是我转化过的一个示例:

?

很多时候我们可能对默认转化出来的文档不是很满意,但是,没关系,我们可以在完成第一步之后编辑 rst 文件,然后调整到我们满意之后,再 make html,这样就会好很多!

Reference

  1. Google Python Style Guide
  2. reStructuredText Primer
时间: 2024-10-10 04:54:39

从开源项目看python代码注释的相关文章

vim编译器中多行注释方法(尤其对python代码注释)

------------------------------------------------------vim编译器中多行注释-------------------------------------------------------- 在vim命令下编写python程序时,有时候要进行多行注释,比较麻烦.因为python不像c语言那样可以用/*xxxx*/进行多行注释,只能每一行用#来注释,如果有几百行那得注释到什么时候.除了老老实实的一行一行注释外,这里再分享几种方法: 第一种:把要注

Ceph,Red Hat在代码贡量献上一骑绝尘的开源项目

前言: 笔者在之前的<从PowerVM,KVM到Docker:存储池的配置与调优-第一篇>中,分享了PowerVM下存储池的配置和调优的方法.在X86虚拟化和云时代,Ceph具有天生的优势,因此本文着重介绍Ceph的原理和架构.同时,本文也作为<从PowerVM,KVM到Docker:存储池的配置与调优-第二篇>而存在. Ceph的前世 2014年,红帽收购Inktank(Inktank主要提供基于Ceph的企业级产品),此次收购后,红帽成为最大的开源存储产品提供商,包括对象存储.

Python代码样例列表

├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│      NFA引擎,Python正则测试工具应用示例.py│      Python datetime计时程序的实现方法.py│      python du熊学斐波那契实现.py│      python lambda实现求素数的简短代码.py│      Python localtime()方法计算今天是一年中第几周.py│      Python math方法算24点代码详解.py│      Pyth

这个库厉害了,自动补全Python代码,节省50%敲码时间

近日,Reddit 上的一篇帖子引起了网友的热议.帖子作者「mlvpj」称: 「我们使用深度学习完成了一个简单的项目,可以自动进行 Python 代码补全.」 根据介绍,该项目基于 LSTM 模型,训练后,负责对代码的缺失部分进行补全.评价模型的方法是判断节省了多少的按键信息--即模型给出长度为 L 的代码建议,如果和真实的代码匹配,则节省 L - 1 个键入操作.实验结果说明,大约可以节省 30%-50% 的**时间键入成本**. 作者在帖子中表示,他们接下来会尝试不同的架构,并提高推断的表现

凡信2.0beta发布-超仿微信的开源项目 (更新了朋友圈和钱包)

凡信的第一个版本于2015年4月份发布,之后由于自己工作忙碌的原因,一直没有重大的更新内容.2016年1月份抽空做了一些更新.主要是加入了朋友圈和钱包这两块内容,以及对第一版的一些bug的修复.凡信2.0依然是基于环信IM通信云SDK开发的,当前状态下第三方通信云趋于火热,环信也这一年走过四轮共计几千万美元的融资,开发者用户也呈现几万的增长.这个项目也算是给需要集成IM云的开发者提供一个参考,给刚接触Android开发,对Android整体开发框架还很模糊同学提供一个学习的教材. 关于此次更新的

教你阅读Python开源项目代码

为什么要阅读开源代码 阅读 Python 开源项目代码主要有如下三个原因: 在工作过程中遇到一些问题 Google 和 StackOverFlow 等网站找不到解决办法,只能去翻源码. 对某些项目或者方向非常感兴趣,希望深入. 学习遇到瓶颈需要汲取开源项目的经验和用法来做提高.注意:很多人学Python过程中会遇到各种烦恼问题没有人帮答疑.为此小编建了个Python全栈免费答疑交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python教程项目可拿

2013年最好的Python开源项目汇总

2013年Python社区诞生了很多实用的开发工具,这些工具 在一定程度上 可以帮助你节省更多的时间.本文为你汇总了这些工具,它们大部分都是开源的,你还可以通过源码来学习更多的Python开发知识. 1. Radon Radon是一个用于 从源代码中计算出各种指标的 Python工具,包括: McCabe复杂性计算,也就是循环复杂度 SLOC( 源代码行 ).注释行数.空白行数等指标计算 Halstead指标计算 可维护性指数(主要是用在Visual Studio里面) Radon只需要一个代码

值得阅读的C语言开源项目代码

本文地址:http://www.cnblogs.com/archimedes/p/c-opensource-project.html,转载请注明源地址. 本篇文章主要总结一些C开源项目,有些是很著名的,有些则比较生僻 1.Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力.Webbench使用C语言编写, 代码实在太简洁,源码加起来

Python:渗透测试开源项目

Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工具:HULK SSL安全扫描器:SSLyze 网络 Scapy: send, sniff and dissect and forge network packets. Usable interactively or as a library pypcap, Pcapy and pylibpcap: