为什么选择 nbdev

为什么我们使用 nbdev 开发软件

流行的 Python 文档标准,例如 numpy docstringssphinx,通过 docstrings 促进了源代码的文档编写,但 docstrings 的表达能力和功能有限。另一方面,与 docstrings 相比,Notebook 提供了更丰富的媒介来编写文档(包含 markdown 和代码单元),并解锁了其他方式难以实现的文档化代码的新方法。

此外,传统的测试框架,例如 pytestunittest,鼓励在与相关源代码和文档分离的独立上下文中编写测试。使用 nbdev,您可以在与源代码和文档相同的上下文中编写测试,这样测试可以选择性地成为文档叙述的一部分。

由于 nbdev 允许您的同事和用户在单个上下文中查看测试、代码和文档,并且 REPL 鼓励实验,因此您在 nbdev 中编写代码、文档和测试的方式与传统的软件开发工作流程非常不同。

Notebook 最佳实践中,我们比较了在 nbdev 中编写、测试和文档化的函数与普通 .py 文件中的情况。以下是我们使用其他方法时遇到的一些挑战,这些挑战促使我们转向使用 nbdev。在 .py 文件中,

  1. Docstrings 重复了函数签名中已包含的信息,例如参数名称、默认值和类型
  2. 示例需要手动输入。这要求作者同时复制和粘贴代码和输出。此外,每次代码更改时,作者都必须手动重新输入或更改这些示例,这是一个容易出错的过程
  3. 示例仅限于短代码片段,不能包含绘图或图形等丰富的输出
  4. 除了代码注释外,示例中不能穿插散文与代码
  5. 您的代码读者如果想重现示例,必须复制和粘贴 docstring 的内容。