出于教学目的,我想要一个显示(作为单元格的输出)函数源代码的 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)))
两个问题:
- 这个要点表明,可以通过定义适当的细胞魔法来显示整个功能。如上所述,是否可以定义适当的单元格魔术来仅显示单个功能?
- 有没有一种方法可以在不导入整个模块的情况下做到这一点,或者有一种更强大的方法来做到这一点?