目的
我们写完一个函数之后不知道我们写的对不对,python提供了一个检测机制,我们只需给出函数的正确输出的例子,函数便会自动计算看是否与我们定义的例子一样,这个功能在doctest模块中
举例
函数:计算前n个自然数的和
注意:在函数的docstring(函数说明)里我们定义了两个函数调用的例子,并且给出了我们希望得到的输出
>>> def sum_naturals(n):
... """ Return sum of the first n natutal numbers
...
... >>> sum_naturals(10)
... 55
... >>> sum_naturals(100)
... 5050
... """
... total, k = 0, 0
... while(k <= n):
... total, k = total + k, k + 1
... return total
然后我们调用doctest判断函数的正确性
首先,我们从doctest导入testmod,然后从doctest导入run_docstring_examples
>>> from doctest import testmod
>>> testmod()
TestResults(failed=0, attempted=2)
>>> from doctest import run_docstring_examples
>>> run_docstring_examples(sum_naturals, globals(), True)
Finding tests in NoName
Trying:
sum_naturals(10)
Expecting:
55
ok
Trying:
sum_naturals(100)
Expecting:
5050
ok
>>>
可以看到我们的例子都输出了ok,说明至少在给出的example中函数是正确的。
如果错误会输出什么呢?
我们将函数中的sum_naturals(10)的结果改成1,然后重复验证操作
>>> def sum_naturals(n):
... """ Return sum of the first n natutal numbers
...
... >>> sum_naturals(10)
... 1
... >>> sum_naturals(100)
... 5050
... """
... total, k = 0, 0
... while(k <= n):
... total, k = total + k, k + 1
... return total
输出
>>> run_docstring_examples(sum_naturals, globals(), True)
Finding tests in NoName
Trying:
sum_naturals(10)
Expecting:
1
**********************************************************************
File "__main__", line 4, in NoName
Failed example:
sum_naturals(10)
Expected:
1
Got:
55
>>>
此时函数出现错误
以上就是用python自带的方式检测函数的正确性