Отображение SVG в ноутбуке IPython из функции

В ноутбуке IPython следующий код отображает SVG под ячейкой:

from IPython.display import SVG
SVG(url='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg')

Ниже ничего не отображается:

from IPython.display import SVG
def show_svg():
    SVG(url='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg')

Есть ли способ отобразить SVG из функции (или класса)?

Ответ 1

Вам нужно display SVG, например

from IPython.display import SVG, display
def show_svg():
    display(SVG(url='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg'))

Первый пример работает, когда объект SVG возвращается сам, а затем отображается машиной отображения IPython. Поскольку вы хотите создать свой SVG-объект в пользовательском методе, вам нужно позаботиться о его отображении.
Вызов display аналогичен обычному выражению print, но может обрабатывать различные представления, такие как изображения, html, латекс и т.д. Подробнее см. богатая документация по отображению.

Ответ 2

Добавьте return к вашей функции:

from IPython.display import SVG
def show_svg():
    return SVG(url='http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg')

Затем вызовите свои функции как последнюю строку в ячейке:

show_svg()