【问题标题】:How to show source code of a package function in IPython notebook如何在 IPython 笔记本中显示包函数的源代码
【发布时间】:2013-12-18 17:56:24
【问题描述】:

出于教学目的,我想要一个显示(作为单元格的输出)函数源代码的 IPython 笔记本,但我希望能够在多个笔记本中引用它。因此,我想以类似于使用 %psource 魔法的方式显示函数代码,但适当地突出显示语法。

这是与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)))

两个问题:

  1. This gist 建议通过定义适当的单元魔术来显示整个功能。是否可以像上面那样定义一个适当的单元格魔术来只显示一个函数?
  2. 有没有一种方法可以在不导入整个模块的情况下执行此操作,或者是否有更强大的方法来执行此操作?

【问题讨论】:

    标签: python ipython ipython-notebook ipython-magic


    【解决方案1】:

    1) 魔术只是简单的函数,不难定义,如果我没记错的话,你可以看看hereCustomizing IPython - Config.ipynb。我仍然不确定是否值得为你定义一个魔法。

    2) 大多数时候,不会。您必须导入模块,因为我们需要实时代码来了解它的定义位置。

    一般来说,查找函数的代码并不总是那么容易。在 python 3 上,您始终可以访问代码对象,但大多数情况下,一旦您拥有诸如装饰函数或动态生成的函数之类的东西,就变得很困难。我想你也可以从psource/pinfo2 中获得启发,让他们返回信息而不是分页。

    【讨论】:

      猜你喜欢
      • 2015-07-31
      • 2016-02-24
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2013-10-19
      相关资源
      最近更新 更多