注意
转到结尾 下载完整的示例代码。或者在您的浏览器中通过 JupyterLite 或 Binder 运行此示例。
捕获输出表示#
此示例演示了配置 capture_repr (控制捕获的输出) 的工作原理。默认的 capture_repr 设置是 capture_repr: ('_repr_html_', '__repr__'),并在构建 Sphinx-Gallery 文档时使用。本示例演示了使用此设置捕获的输出。还解释了使用其他 capture_repr 设置时捕获的输出之间的差异。
下面的代码块没有捕获任何内容,因为没有数据被定向到标准输出,并且最后一个语句是赋值语句,而不是表达式。
如果您确实希望捕获 b 的值,您需要使用
10
Sphinx-Gallery 首先尝试捕获 b 的 _repr_html_,因为这是 capture_repr 元组中的第一个“表示”方法。由于此方法对于 b 不存在,Sphinx-Gallery 会继续并尝试捕获 __repr__ 方法,该方法在元组中排第二。此方法对于 b 存在,因此它被捕获,并且上面的输出可见。
下面的代码块中使用 pandas 数据框来提供一个具有 _repr_html_ 方法的表达式的示例。
# example 3
import pandas as pd
df = pd.DataFrame(data={"col1": [1, 2], "col2": [3, 4]})
df
pandas 数据框 df 同时具有 __repr__ 和 _repr_html_ 方法。由于 _repr_html_ 在 capture_repr 元组中排在前面,因此 _repr_html_ 会优先于 __repr__ 被捕获。
对于下面的示例,有数据被定向到标准输出,并且最后一个语句是表达式。
Hello world
12
Statsmodels 表格也应该被适当地设置样式
# example 5
import numpy as np
import statsmodels.iolib.table
statsmodels.iolib.table.SimpleTable(np.zeros((3, 3)))
print() 输出到标准输出,标准输出始终被捕获。因此,字符串 'Hello world' 被捕获。最后一个表达式的“表示”也被捕获。同样,由于此表达式 a + b 不具有 _repr_html_ 方法,因此捕获了 __repr__ 方法。
Matplotlib 输出#
Matplotlib 函数调用通常会返回一个 Matplotlib 对象,并输出图形。对于最后一个语句是 Matplotlib 表达式的代码块,会捕获对象的“表示”,以及图形。这是因为 Matplotlib 对象具有 __repr__ 方法,并且我们的 capture_repr 元组包含 __repr__。请注意,Matplotlib 对象还具有 __str__ 方法。
在下面的示例中,matplotlib.pyplot.plot() 返回一个表示绘制数据的 Line2D 对象列表,以及列表的 __repr__ 和图形。
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])

[<matplotlib.lines.Line2D object at 0x7f27dcf9aec0>]
要避免捕获文本表示,您可以将最后一个 Matplotlib 表达式赋值给一个临时变量

或者,您可以在代码块的末尾添加 plt.show(),该方法不会返回任何内容

capture_repr 配置#
capture_repr 配置默认情况下为 ('_repr_html_', '__repr__')。这会指示 Sphinx-Gallery 捕获代码块最后一个语句的“表示”(如果它是表达式)。Sphinx-Gallery 会根据“表示”在元组中出现的顺序来执行此操作。使用默认的 capture_repr 设置,首先尝试捕获 _repr_html_。如果此方法不存在,则会捕获 __repr__ 方法。如果 __repr__ 也不存在(对于非用户定义的对象来说不太可能),则不会捕获任何内容。例如,如果配置被设置为 'capture_repr': ('_repr_html_'),则示例 2 将不会捕获任何内容,因为 b 不具有 _repr_html_。您可以更改 capture_repr 元组中的“表示”,以微调在示例 .py 文件中捕获的内容。
要仅捕获定向到标准输出的数据,您可以将 capture_repr 设置为空元组:capture_repr: ()。使用此设置,仅捕获定向到标准输出的数据。对于上面的示例,仅捕获示例 4 的输出。尽管最后一个语句对于示例 2、3 和 4 都是表达式,但不会输出最后一个表达式的“表示”。您需要在最后一个表达式中添加 print() 来捕获它的“表示”。空元组设置模仿了 Sphinx-Gallery 在 v0.5.0 之前(引入此配置时)的行为。
脚本总运行时间:(0 分钟 2.538 秒)
估计内存使用量:181 MB