IPython 使用显示的 _repr_ 方法的优先顺序

IPython priority order of _repr_ methods using display

在IPython(以及Jupyter笔记本)中,我可以在对象上定义_repr_html__repr_svg_等方法,调用[=13=时将使用这些方法].但是,如果定义了多个这样的方法并且可以使用(例如,在网络浏览器中查看笔记本,并显示一个同时具有 _repr_html__repr_svg_ 方法的对象),哪个优先?在 https://ipython.readthedocs.io/en/stable/api/generated/IPython.display.html#IPython.display.display 的文档注释中有以下列表,但它没有说明这是优先顺序

是否有我遗漏的相关文档?

优先级由前端决定,而不是IPython。 IPython 将它们全部发送(除非您使用带有 excludeinclude 关键字的显示。原因是一旦笔记本被保存,您可能希望使用另一个具有不同显示优先顺序的前端打开。

经典笔记本有以下顺序(outputarea.js 第 1080 行):

OutputArea.display_order = [
    MIME_JAVASCRIPT,
    MIME_HTML,
    MIME_MARKDOWN,
    MIME_LATEX,
    MIME_SVG,
    MIME_PNG,
    MIME_JPEG,
    MIME_GIF,
    MIME_PDF,
    MIME_TEXT
];

对于 JupyterLab 这有点复杂,每个注册的 mimetype 都可以分配一个等级(并且可能会更改),因为扩展可以安装 mime-handler 这将取决于您拥有的扩展。

Nbconvert 也有自己的 html 类出口商订单:

display_data_priority = List(['text/html', 'application/pdf', 'text/latex', 'image/svg+xml', 'image/png', 'image/jpeg', 'text/markdown', 'text/plain']

对于类似 tex 的导出器:

'display_data_priority' : ['text/latex', 'application/pdf', 'image/png', 'image/jpeg', 'image/svg+xml', 'text/markdown', 'text/plain']

我为 JupyterCon 2017 – Jupyter: Kernels, Protocols, and the IPython Reference Implementation(大约 t=25 分钟)写了一个演示,以表明笔记本可以有一个下拉菜单来切换在每个单元格的基础上显示哪些表示,实际上需要如果您有 usage/motivation 贡献,则在主分支中实施和合并。