Jupyter notebook IPython使用display的_repr__方法的优先级顺序

Jupyter notebook IPython使用display的_repr__方法的优先级顺序,jupyter-notebook,ipython,Jupyter Notebook,Ipython,在IPython(因此也就是Jupyter笔记本电脑)中,我可以在对象上定义方法,例如\u repr\u html和\u repr\u svg\u,这些方法将在调用IPython.display.display(my\u obj)时使用。但是,如果定义了多个这样的方法并且可以使用(例如,在web浏览器中查看笔记本,并显示一个同时具有\u repr\u html\u和\u repr\u svg\u方法的对象),那么哪个方法将优先?在的文档注释中有以下列表,但没有说明这是按优先顺序排列的 HTML

在IPython(因此也就是Jupyter笔记本电脑)中,我可以在对象上定义方法,例如
\u repr\u html
\u repr\u svg\u
,这些方法将在调用
IPython.display.display(my\u obj)
时使用。但是,如果定义了多个这样的方法并且可以使用(例如,在web浏览器中查看笔记本,并显示一个同时具有
\u repr\u html\u
\u repr\u svg\u
方法的对象),那么哪个方法将优先?在的文档注释中有以下列表,但没有说明这是按优先顺序排列的

  • HTML
  • JSON
  • 巴布亚新几内亚
  • JPEG
  • SVG
  • 乳胶

是否有我遗漏的文档?

优先级由前端决定,而不是IPython。IPython会将它们全部发送出去(除非您将display与
exclude
include
关键字一起使用)。原因是保存笔记本后,您可能希望使用另一个具有不同显示优先级顺序的前端打开

经典笔记本的顺序如下(outputrea.js第1080行):

对于JupyterLab来说,这有点复杂,每个注册的mimetype都可以获得一个分配给它的秩(可能会更改),因为扩展可以安装mime处理程序,这取决于您拥有的扩展

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

display_data_priority = List(['text/html', 'application/pdf', 'text/latex', 'image/svg+xml', 'image/png', 'image/jpeg', 'text/markdown', 'text/plain']
对于tex-like出口商:

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

我写了一个演示(大约t=25分钟),展示了笔记本电脑可以有一个下拉菜单来切换哪个表示在每个单元的基础上显示,如果您有贡献的用途/动机,仍然需要在主分支中实际实现和合并。

这真的很有用,谢谢@matt。我们有一个问题,对于某些对象,SVG表示可能太大,以致于浏览器暂停或崩溃。但是根据您的说法,如果我调用
display()
在这样一个对象上,即使repr_html方法是默认的前端显示,它也会发送SVG表示,因此有可能会暂停。在这种情况下,我相信您可以执行显示(object=…,exclude={'SVG'}),它不会计算也不会发送SVG。
'display_data_priority' : ['text/latex', 'application/pdf', 'image/png', 'image/jpeg', 'image/svg+xml', 'text/markdown', 'text/plain']