【发布时间】:2020-10-03 18:03:25
【问题描述】:
设置
-
假设我有一个脚本
fib.py。里面有一些文档测试。def fib(n): """Return the nth number in the Fibonacci sequence. >>> fib(0) 0.0 >>> fib(1) 1.0 >>> fib(4) 3.0 >>> fib(7) 13.0 """ a, b = 0.0, 1.0 for i in range(n): a, b = a + b, a return a if __name__ == "__main__": import doctest doctest.testmod()一切正常,我可以确认测试正在运行 通过检查
python3 fib.py -v的输出。 -
好的,现在我要把它翻译成 Cython,而且我什至会删除
if __name__ == '__main__'有条件的。 让我们调用我们的 Cython 文件fib.pyx#cython: language_level=3 def fib(int n): """Return the nth number in the Fibonacci sequence. >>> fib(0) 0.0 >>> fib(1) 1.0 >>> fib(4) 3.0 >>> fib(7) 13.0 """ cdef int i cdef double a=0.0, b=1.0 for i in range(n): a, b = a + b, a return a import doctest doctest.testmod() -
当然,我们需要编译我们的 Cython。对我来说是
cython --embed fib.pyx gcc $(python-config --cflags) $(python-config --ldflags) fib.c这会产生
a.out。 -
如果我尝试
./a.out -v我会得到 . . .1 items had no tests: __main__ 0 tests in 1 items. 0 passed and 0 failed. Test passed.
我的测试结果如何?
(可能)有用的链接。
【问题讨论】:
-
你能依靠
pytest来运行文档测试吗? -
只要文档测试运行就可以。我尝试通过
pip install pytest && pip install pytest-cython安装它。根据帮助页面,我可以运行pytest --doctest-cython来运行所有 doctest,但它说要运行 0 个测试。