docbench—使用doctest进行基准测试

docbench的Python项目详细描述


docbench是一个基于 doctest到基准 python代码。如果你已经熟悉了博士,你应该 能在几分钟内使用docbench。如果你发现那个医生 方便-或Python-希望你会有同样的感觉 码头工人!


我们将通过一个简单的用例来指导您如何使用docbench: 计算素数的模块。

创建一个primes.py文件并定义primes函数:

def primes(n):
    p = []
    for i in range(2, n+1):
        for j in range(2, i):
            if (i % j == 0):
                break
        else:
            p.append(i)
    return p

函数返回一个素数的有序列表 n。它的实现很简单,但是执行需要很多 n增长的时间。下列sieve函数应返回 相同的结果,但计算量较少,因此应该 更快。

def sieve(n):
    p = []
    for i in range(2, n+1):
        prime = True
        for j in p:
            if j * j > i:
                break
            if (i % j == 0):
                prime = False
                break
        if prime:
            p.append(i)
    return p

医生-有效吗?

如果您已经知道doctest,可以跳过此部分。

用doctest测试这个模块非常简单:创建 test.py带有函数的文件test_primes没有实现 但是primes函数的doctest:

def test_primes():
    """
    >>> from primes import primes
    >>> n = 50
    >>> primes(n)
    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
    """

如果test_primesdoctest作为 在这个doctest中公布,primes函数的行为正确。 因此,现在可以对primes测试sieve

def test_sieve():
    """
    >>> from primes import primes, sieve
    >>> n = 10000
    >>> primes(n) == sieve(n)
    True
    """

最后,在文件末尾添加以下样板a:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

您可以使用以下命令执行此测试套件:

$ python test.py

没有显示错误?primes模块已成功通过所有 测验!

Docbench–是不是很快?

创建新文件名benchmark.py。添加充当 函数primessieve的docbench持有者。我们依靠 只有在最后一次陈述中所花费的时间 docbench将被测量,前面的被认为是设置代码。

def benchmark_primes():
    """
    >>> from primes import primes
    >>> n = 10000
    >>> primes(n)
    """

def benchmark_sieve():
    """
    >>> from primes import sieve
    >>> n = 10000
    >>> sieve(n)
    """

在文件末尾添加以下样板:

if __name__ == "__main__":
    import docbench
    docbench.benchmod()

使用以下命令运行基准:

$ python benchmark.py

您应该得到类似的输出:

Benchmark                  Time
-------------------------  ----------------
__main__.benchmark_primes  1.03
__main__.benchmark_sieve   0.00876

实际上,sieveprimes快得多!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OnResizeListener或OnDrawListener或类似的东西   java Orika映射嵌套子列表   保存时java Heroku请求超时代码H12   数据库在Java中出现socket读取超时异常的原因是什么?   java如何更改来自Sqlite数据库的特定数据在Listview中的行颜色   java JAXB解组器无法正确处理XML中的列表   java Android日期时区让我抓狂   java不透明属性在Swing中如何工作?   eclipse从JavaEE代码生成流程图   java如何在Hibernate中从相关表中获取计数   java Glassfish部署了项目的依赖项库   java使内容适合JavaFx中的WebView   java不满意的链接错误libcrypto。所以1.0.0   循环中java数组的使用   java找出哪个包调用服务