python 2 / python 3 的便携式文档测试可能吗?

2024-02-15

def fib_r(n, memo={0: 0, 1: 1}):
    """recursive fibonacci numbers generation with memoisation

    >>> [fib_r(n) for n in range(10)]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
    >>> fib_r(100)
    354224848179261915075"""
    if n not in memo:
        memo[n] = fib(n - 1) + fib(n - 2)
    return memo[n]

上面的 doctest 在 python 3 上通过,但在 2.x 上失败,如下所示:

**********************************************************************
File "euler.py", line 93, in __main__.fib
Failed example:
    fib_r(100)
Expected:
    354224848179261915075
Got:
    354224848179261915075L

这只是一个例子,我在其他几种情况下也见过这种情况(例如,unicode 字符串是否有u前缀与否)。我想知道是否有一个选项doctest像这样忽略 python 2 和 3 之间的细微差异?

我并不是在寻找一种解决方法来修改测试本身,以便尽管有限制它仍然可以工作。我只是想知道是否有一个标志或其他东西可以允许对 python 版本中已更改的这些小事情的兼容性进行一些宽大处理。


doctests 可能会在 Python 2.x 和 3.x 之间提供不同的输出,正是针对这种情况,但当然其他示例将更改 std-lib API。

正如有人在对您的问题的评论中已经指出的那样,最好的选择是找到方法来生成在 2.x 和 3.x 中保持一致的 doctest 输出。

对于您的特定示例,请记住 Python 的定义long整数取决于体系结构和解释器。一台不错的 128 位 Cray 超级计算机会很乐意考虑以下结果fib(100)作为常规整数。所以无论你得到一个L或不在值的末尾比 2.x 与 3.x 更微妙——尽管你在 3.x 中是对的L现在永远不会显示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 2 / python 3 的便携式文档测试可能吗? 的相关文章

随机推荐