Python中的多行注释文档编写风格汇总


Posted in Python onJune 16, 2016

什么是docstring

在软件工程中,其实编码所占的部分是非常小的,大多是其它的事情,比如写文档。文档是沟通的工具。
在Python中,比较推崇在代码中写文档,代码即文档,比较方便,容易维护,直观,一致。
代码写完,文档也出来了。其实Markdown也差不多这种思想,文本写完,排版也完成了。
看看PEP 0257中对docstring的定义:

A docstring is a string literal that occurs as the first statement in
a module, function, class, or method definition. Such a docstring
becomes the __doc__ special attribute of that object.
简单来说,就是出现在模块、函数、类、方法里第一个语句的,就是docstring。会自动变成属性__doc__。

def foo():
  """ This is function foo"""

可通过foo.__doc__访问得到' This is function foo'.

各类docstring风格:

Epytext

这是曾经比较流行的一直类似于javadoc的风格。

"""
This is a javadoc style.

@param param1: this is a first param
@param param2: this is a second param
@return: this is a description of what is returned
@raise keyError: raises an exception
"""

reST

这是现在流行的一种风格,reST风格,Sphinx的御用格式。我个人也是喜欢用这种风格,比较紧凑。

"""
This is a reST style.

:param param1: this is a first param
:param param2: this is a second param
:returns: this is a description of what is returned
:raises keyError: raises an exception
"""

Google风格

"""
This is a groups style docs.

Parameters:
  param1 - this is the first param
  param2 - this is a second param

Returns:
  This is a description of what is returned

Raises:
  KeyError - raises an exception
"""

Numpydoc (Numpy风格)

"""
My numpydoc description of a kind
of very exhautive numpydoc format docstring.

Parameters
----------
first : array_like
  the 1st param name `first`
second :
  the 2nd param
third : {'value', 'other'}, optional
  the 3rd param, by default 'value'

Returns
-------
string
  a value in a string

Raises
------
KeyError
  when a key error
OtherError
  when an other error
"""

docstring工具之第三方库pyment

用来创建和转换docstring.
使用方法就是用pyment生成一个patch,然后打patch。

$ pyment test.py      #生成patch
$ patch -p1 < test.py.patch #打patch

详情:https://github.com/dadadel/pyment

使用sphinx的autodoc自动从docstring生产api文档,不用再手写一遍

我在代码中已经写过docstring了,写api文档的内容跟这个差不多,难道要一个一个拷贝过去rst吗?当然不用。sphinx有autodoc功能。
首先编辑conf.py文件,
1. 要有'sphinx.ext.autodoc'这个extensions
2. 确保需要自动生成文档的模块可被import,即在路径中。比如可能需要sys.path.insert(0, os.path.abspath(‘../..'))

然后,编写rst文件,

xxx_api module
---------------------

.. automodule:: xxx_api
  :members:
  :undoc-members:
  :show-inheritance:
敲make html命令,就可以从docstring中生成相关的文档了,不用多手写一遍rst.
看效果:
Python中的多行注释文档编写风格汇总
Python 相关文章推荐
Python下rrdtool模块的基本使用方法
Nov 13 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
Python3如何解决字符编码问题详解
Apr 23 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
python序列类型种类详解
Feb 26 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
Feb 28 Python
python为QT程序添加图标的方法详解
Mar 09 Python
如何理解python面向对象编程
Jun 01 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
python解压zip包中文乱码解决方法
Nov 27 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 #Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 #Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 #Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
Jun 16 #Python
Python黑魔法@property装饰器的使用技巧解析
Jun 16 #Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 #Python
浅析Python中else语句块的使用技巧
Jun 16 #Python
You might like
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
php中目录,文件操作详谈
2007/03/19 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
php学习之流程控制实现代码
2011/06/09 PHP
PHP中PDO的错误处理
2011/09/04 PHP
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
javascript常用的方法分享
2015/07/01 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
简单谈谈Python流程控制语句
2016/12/04 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
python实现两个文件夹的同步
2019/08/29 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Python urllib2运行过程原理解析
2020/06/04 Python
Django实现随机图形验证码的示例
2020/10/15 Python
python 制作网站小说下载器
2021/02/20 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
销售简历自我评价
2014/01/24 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
Minikube搭建Kubernetes集群
2022/03/31 Servers
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
MySQL 数据 data 基本操作
2022/05/04 MySQL
MySQL添加索引特点及优化问题
2022/07/23 MySQL