摄影:产品经理厨师:kingname
如果大家看过一些有名的Python开源项目,你可能会看到他们在文档型注释里面,出现了下面这样的使用示例:
""" Requests HTTP Library ~~~~~~~~~~~~~~~~~~~~~ Requests is an HTTP library, written in Python, for human beings. Basic GET usage: >>> import requests >>> r = requests.get('https://www.python.org') >>> r.status_code 200 >>> b'Python is a programming language' in r.content True ... """
这段代码来自 requests
:https://github.com/psf/requests/blob/master/requests/__init__.py
可能有同学会觉得,这只是普通的注释,帮助读代码的人知道这段代码是怎么用的。
但实际上,Python自带的 doctest
模块,可以识别这种注释,并根据这里的用法来测试对应的函数或者类。
例如,我们创建一个 test_doc.py
文件,其内容如下:
def test(n): """ 用于判断传入参数n的奇偶性 >>> test(1) 1是奇数 >>> test(2) 2是偶数 """ if n % 2 == 0: print(f'{n}是偶数') else: print(f'{n}是奇数')
如下图所示
现在我们运行如下代码:
python3 -m doctest test_doc.py
发现没有任何输出,如下图所示:
现在,我们把这个注释 改错
,让注释与实际情况不符合,如下图所示:
保存代码,再次运行命令,发现报错了,如下图所示:
返回的报错信息里面:
Failed example: test(1) Expected: 1是偶数 Got: 1是奇数
Expected
表示期望的输出结果, Got
表示实际的输出结果。
通过使用doctest,可以有效帮你完善函数或者类的文档,并且当你每次修改了函数或类的时候,都用doctest来检查一下,如果输入输出发生了改变,doctest就会发现并告诉你。