如果大家看过一些有名的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就会发现并告诉你。
doctest的详细使用,可以阅读Python的官方文档:https://docs.python.org/3/library/doctest.html