擷取輸出表示法#

此範例示範了組態 capture_repr (控制擷取的輸出) 的運作方式。預設的 capture_repr 設定是 capture_repr: ('_repr_html_', '__repr__'),並且在建置 Sphinx-Gallery 文件時使用。此設定擷取的輸出會在此範例中示範。也會說明使用其他 capture_repr 設定會擷取的輸出差異。

因為沒有資料導向標準輸出,且最後一個語句是賦值,而不是表達式,所以沒有擷取以下程式碼區塊的任何內容。

# example 1
a = 2
b = 10

如果您希望擷取 b 的值,您需要使用

# example 2
a = 2
b = 10
b  # this is an expression
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
col1 col2
0 1 3
1 2 4


pandas 資料框架 df 同時具有 __repr___repr_html_ 方法。由於 _repr_html_ 出現在 capture_repr 元組中的第一個位置,因此會優先擷取 _repr_html_,而不是 __repr__

對於以下範例,有資料導向標準輸出,且最後一個語句是表達式。

# example 4
print("Hello world")
a + b
Hello world

12

Statsmodels 表格也應適當地設定樣式

# example 5
import numpy as np
import statsmodels.iolib.table

statsmodels.iolib.table.SimpleTable(np.zeros((3, 3)))
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0


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])
plot 3 capture repr
[<matplotlib.lines.Line2D object at 0x7f27dcf9aec0>]

為了避免擷取文字表示法,您可以將最後一個 Matplotlib 表達式賦值給暫時變數

_ = plt.plot([1, 2, 3])
plot 3 capture repr

或者,您可以在程式碼區塊的結尾新增 plt.show(),它不會傳回任何內容

plt.plot([1, 2, 3])
plt.show()
plot 3 capture repr

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() 新增至最後一個表達式,以擷取它的「表示法」。空元組設定模擬 v0.5.0 之前的 Sphinx-Gallery 行為,當時引入了此組態。

腳本總執行時間:(0 分鐘 2.538 秒)

估計記憶體使用量: 181 MB

Sphinx-Gallery 產生的展示