最好将文档作为开发过程的一部分。Sphinx 加上 Tox,让文档可以轻松书写,并且外观漂亮。-- Moshe Zadka(作者)

Python 代码可以在源码中包含文档。这种方式默认依靠 docstring,它以三引号格式定义。虽然文档的价值是很大的,但是没有充足的文档的代码还是很常见。让我们演练一个场景,了解出色的文档的强大功能。

经历了太多在白板技术面试上要求你实现斐波那契数列,你已经受够了。你回家用 Python 写了一个可重用的斐波那契计算器,使用浮点技巧来实现 O(1) 复杂度。

代码很简单:

# fib.pyimport math_SQRT_5 = math.sqrt(5)_PHI = (1 + _SQRT_5) / 2def approx_fib(n): return round(_PHI**(n+1) / _SQRT_5)

(该斐波那契数列是四舍五入到最接近的整数的几何序列,这是我最喜欢的鲜为人知的数学事实之一。)

作为一个好人,你可以将代码开源,并将它放在 PyPI 上。setup.py 文件很简单:

import setuptoolssetuptools.setup( name='fib', version='2019.1.0', description='Fibonacci', py_modules=["fib"],)

但是,没有文档的代码是没有用的。因此,你可以向函数添加 docstring。我最喜欢的 docstring 样式之一是 “Google” 样式 。标记很轻量,当它放在源代码中时很好。

def approx_fib(n): """ Approximate Fibonacci sequence Args: n (int): The place in Fibonacci sequence to approximate Returns: float: The approximate value in Fibonacci sequence """ # ...

但是函数的文档只是成功的一半。普通文档对于情境化代码用法很重要。在这种情况下,情景是恼人的技术面试。

有一种添加更多文档的方式,专业 Python 人的方式通常是在 docs/ 添加 rst 文件( reStructuredText 的缩写)。因此 docs/index.rst 文件最终看起来像这样:

Fibonacci=========Are you annoyed at tech interviewers asking you to implementthe Fibonacci sequence?Do you want to have some fun with them?A simple:code:`pip install fib`is all it takes to tell them to,um,fib off... automodule:: fib :members:

我们完成了,对吧?我们已经将文本放在了文件中。人们应该会看的。

使 Python 文档更漂亮

为了使你的文档看起来更漂亮,你可以利用 Sphinx ,它旨在制作漂亮的 Python 文档。这三个 Sphinx 扩展特别有用:

  • sphinx.ext.autodoc:从模块内部获取文档
  • sphinx.ext.napoleon:支持 Google 样式的 docstring
  • sphinx.ext.viewcode:将 ReStructured Text 源码与生成的文档打包在一起

为了告诉 Sphinx 该生成什么以及如何生成,我们在 docs/conf.py 中配置一个辅助文件:

extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.napoleon', 'sphinx.ext.viewcode',]# 该入口点的名称,没有 .rst 扩展名。# 惯例该名称是 indexmaster_doc = "index"# 这些值全部用在生成的文档当中。# 通常,发布(release)与版本(version)是一样的,# 但是有时候我们会有带有 rc 标签的发布。project = "Fib"copyright = "2019, Moshe Zadka"author = "Moshe Zadka"version = release = "2019.1.0"

此文件使我们可以使用所需的所有元数据来发布代码,并注意扩展名(上面的注释说明了方式)。最后,要确保生成我们想要的文档,请使用 Tox 管理虚拟环境以确保我们顺利生成文档:

[tox]# 默认情况下,`.tox` 是该目录。# 将其放在非点文件中可以从# 文件管理器或浏览器的# 打开对话框中打开生成的文档,# 这些对话框有时会隐藏点文件。toxworkdir = {toxinidir}/build/tox[testenv:docs]# 从 `docs` 目录内运行 `sphinx`,# 以确保它不会拾取任何可能进入顶层目录下的# 虚拟环境或 `build/` 目录下的其他工件的杂散文件。changedir = docs# 唯一的依赖关系是 `sphinx`。# 如果我们使用的是单独打包的扩展程序,# 我们将在此处指定它们。# 更好的做法是指定特定版本的 sphinx。deps = sphinx# 这是用于生成 HTML 的 `sphinx` 命令。# 在其他情况下,我们可能想生成 PDF 或电子书。commands = sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html# 我们使用 Python 3.7。# Tox 有时会根据 testenv 的名称尝试自动检测它,# 但是 `docs` 没有给出有用的线索,因此我们必须明确它。basepython = python3.7

现在,无论何时运行 Tox,它都会为你的 Python 代码生成漂亮的文档。

在 Python 中写文档很好

作为 Python 开发人员,我们可以使用的工具链很棒。我们可以从 docstring 开始,添加 .rst 文件,然后添加 Sphinx 和 Tox 来为用户美化结果。

你对好的文档有何评价?你还有其他喜欢的方式么?请在评论中分享它们!


python代码_如何使用 Sphinx 给 Python 代码写文档相关推荐

  1. axis2生成客户端代码_利用ApiPost一键、快速生成接口文档!女猿也过38节!

    对于我们这些程序员和程序媛来讲,最头疼的莫过于写文档. 我们可都是正个八经的理工校草和理工女神,研究github.逛逛csdn.写hello world是才我们的拿手菜,写文档是文科生的事情好不啦?( ...

  2. flowable 中文文档_滴滴实习收获 | 产品经理就是写文档和开会沟通的吗?

    本篇文章希望和大家分享我今年的2个思考:一是为什么需要产品经理,二是产品经理的工作核心逻辑是什么.内容会结合<俞军产品方法论>和我自己在滴滴国际化做产品实习的经历. 一.为什么需要产品经理 ...

  3. python如何读取公共盘的文档_如何使用 Sphinx 给 Python 代码写文档 | Linux 中国

    最好将文档作为开发过程的一部分.Sphinx 加上 Tox,让文档可以轻松书写,并且外观漂亮.-- Moshe Zadka Python 代码可以在源码中包含文档.这种方式默认依靠 docstring ...

  4. 用cmd运行python文件_怎么用cmd运行python文件

    Layout Go工程项目的整体组织 首先我们看一下整个 Go 工程是怎么组织起来的. 很多同事都在用 GitLab 的,GitLab 的一个 group 里面可以创建很多 project.如果我们进 ...

  5. 六星教育python怎么样_六星教育:Python怎么学?自学Python经验分享

    近些年,随着人工智能.大数据.自动化运维等行业的兴起,Python在编程方向上得天独厚的优势也凸显出来.随着Python工程师需求的日益增多,Python薪资也随之水涨船高.学习Python的同学越来 ...

  6. Python批量识别图片中的文字并保存到txt文档中

    Python OCR工具pytesseract,之前是惠普的产品,被Google收了之后就给开源了. 1.需要下载并安装Google Tesseract,下载地址看图片上有,要下载4.0.0版本的 2 ...

  7. Python自动化办公学习- 获取文件夹下的所有文档的名字并存储到Excel

    Python自动化办公学习- 获取文件夹下的所有文档的名字并存储到Excel 这是我第一次学习使用csdn发布学习笔记,如有版权侵犯,引用不当的地方,请立即提示我,我会删除,谢谢. 笔记中如有解释错误 ...

  8. java开发文档怎么写_程序员该不该写技术文档,怎么写文档,易懂又能提升自己...

    最近公司项目的调用量突然涨了一大波,很多系统都纷纷扛不住了,于是需要对系统进行优化,系统优化的第一步,便是梳理业务! 在这个过程中,经常出现了这样一些情况,发现数据库的某些字段,没有注释,也没有一定的 ...

  9. 不给代码写文档,让代码文档化

    这是程序员讨论了很久的一个话题:要不要给代码写文档?值得给代码写文档吗? 我曾经觉得这个话题实在是让人难以应付.也认为除去一些特殊的情况(比如编写公用 API),代码文档并不是那么必要.直到有一天,我 ...

最新文章

  1. 用HttpWebRequest抓取网页,尝试自动重定向的次数太多”的错误,
  2. kcf 脊回归 范数
  3. poj3648 2-sat 输出任意一组解
  4. linux 下安装 php 扩展 典型安装 mysql curl mb_string
  5. 光纤通信是如何接入网络的?
  6. 为什么要重写 hashcode 和 equals 方法?
  7. 实践 config drive - 每天5分钟玩转 OpenStack(170)
  8. C# .net web.config配置access连接字符串
  9. android 开发中java.lang.verifyerror问题
  10. 搜索引擎关键字智能提示的一种实现
  11. 我的Java自学之路
  12. MYSQL 最大连接数设置
  13. windows10 安装 rancher desktop及测试案例
  14. (转)详解Windows Hash
  15. python一维数组排序_【Python】数组排序
  16. Python基础与大数据应用(三)
  17. 中科大EPC抢预约考试脚本简单版
  18. mobi格式转换成pdf格式
  19. GB2312编码的字符串如何转换为ISO-8859-1编码?
  20. 用java操作MySQL编写的高校水电费管理系统

热门文章

  1. 一个程序员的C#命名规则(挺不错的)
  2. 《星际争霸 / StarCraft 》超经典游戏!
  3. Apriori算法进行关联分析(1)
  4. windows2008下配置iis时出现错误“由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。”...
  5. 移动开发架构之MVVM模式
  6. PHP中Redis管道
  7. Linux下 运行Jmeter (含一个jmeter简单示例)
  8. PHP算法对获取用,连接的字符串用in进行sql查询的php处理方法
  9. python帮助生活-想把python运用在实际生活中?那么python查询价格方法可以帮助你...
  10. java设计模式通俗_通俗易懂的Java设计模式之工厂方法模式