【发布时间】:2013-12-27 17:55: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 版本中发生变化的小东西兼容。
【问题讨论】:
-
提示:
print(9999999999999999999999999L)输出在两个版本中都没有尾随L。对于更复杂的情况(例如列表中的长整数等),您最好格式化输出......至于u和字符串:python3.3 已经不存在了。 -
这可能对你来说很有趣:pypi.python.org/pypi/doctest-ignore-unicode