В целях обучения я хочу, чтобы ноутбук IPython отображал (как вывод из ячейки) исходный код функции, но я хочу иметь возможность ссылаться на него в нескольких ноутбуках. Поэтому я хотел бы отобразить код функции, аналогично использованию магии% psource, но выделен соответствующий синтаксис.
Это аналогичный вопрос этого вопроса, но я хочу иметь возможность применить его к одной функции внутри файла, а не к полному файлу на один раз.
Используя предложение по предыдущему вопросу, я взломал короткий код, который работает в простых случаях:
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)))
Два вопроса:
- Этот смысл показывает, что показать всю функцию можно путем определения соответствующей клеточной магии. Можно ли определить подходящую магию клеток, чтобы показать только одну функцию, как указано выше?
- Есть ли способ сделать это без импорта всего модуля или более надежного способа сделать это?