В целях обучения я хочу, чтобы ноутбук IPython отображал (как вывод из ячейки) исходный код функции, но я хочу иметь возможность ссылаться на него в нескольких ноутбуках. Поэтому я хотел бы отобразить код функции, аналогично использованию магии % psource, но соответствующий синтаксис выделен.Как показать исходный код функции пакета в записной книжке IPython
Это аналогичный вопрос this question, но я хочу иметь возможность применить его к одной функции внутри файла, а не к полному файлу за один раз.
Используя предложение из предыдущего вопроса я взломал короткий код, который работает в простых случаях:
def print_source(module, function):
"""For use inside an IPython notebook: given a module and a function, print the source code."""
from inspect import getmembers, isfunction, getsource
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
from IPython.core.display import HTML
internal_module = __import__(module)
internal_functions = dict(getmembers(internal_module, isfunction))
return HTML(highlight(getsource(internal_functions[function]), PythonLexer(), HtmlFormatter(full=True)))
два вопроса:
- This gist предполагает, что показывает всю функцию можно было бы сделать, определив соответствующая клеточная магия. Можно ли определить подходящую клеточную магию, чтобы показать только одну функцию, как указано выше?
- Есть ли способ сделать это без импорта всего модуля или более надежного способа сделать это?