【问题标题】:IPython priority order of _repr_ methods using displayIPython 使用显示的 _repr_ 方法的优先级顺序
【发布时间】:2021-04-25 11:45:29
【问题描述】:

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

  • HTML
  • JSON
  • PNG
  • JPEG
  • SVG
  • 乳胶

我错过了这方面的文档吗?

【问题讨论】:

    标签: jupyter-notebook ipython


    【解决方案1】:

    优先级由前端决定,而不是 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 分钟)编写了一个演示,以显示笔记本可以有一个下拉菜单来切换每个单元显示哪些表示,哪些仍然需要实际实现和合并如果您有贡献的用途/动机,请选择主分支。

    【讨论】:

    • 这真的很有用,谢谢@matt。我们有一个问题,对于某些对象,SVG 表示可能太大而导致浏览器停止或崩溃。但从你所说的来看,如果我在这样的对象上调用display(),即使 repr_html 方法是默认的前端显示,它也会发送 SVG 表示,因此有停滞的风险。
    • 在这种情况下你可以做 display(object=..., exclude={'svg'}) 我相信它不会计算也不会发送 SVG。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2011-03-08
    • 2021-11-29
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多