Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在IPython笔记本中显示包函数的源代码_Python_Ipython_Ipython Notebook_Ipython Magic - Fatal编程技术网

如何在IPython笔记本中显示包函数的源代码

如何在IPython笔记本中显示包函数的源代码,python,ipython,ipython-notebook,ipython-magic,Python,Ipython,Ipython Notebook,Ipython Magic,出于教学目的,我想要一个IPython笔记本,显示函数源代码(作为单元格的输出),但我希望能够在多个笔记本中引用它。因此,我希望以与使用%psource魔术类似的方式显示函数代码,但适当地突出显示语法 这是一个与类似的问题,但我希望能够将其应用于文件中的单个函数,而不是一次应用于整个文件 根据上一个问题的建议,我破解了一个在简单情况下有效的短代码: def print_source(module, function): """For use inside an IPython noteb

出于教学目的,我想要一个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)))
两个问题:

  • 建议通过定义适当的细胞魔法来展示整个功能。是否可以定义一个适当的单元格魔术,只显示一个函数,如上所述
  • 有没有一种方法可以在不导入整个模块的情况下执行此操作,或者有一种更健壮的方法执行此操作 1) Magics只是一个简单的函数,不难定义,如果我没记错的话,你可以看看定制IPython-Config.ipynb。我仍然不确定在你的情况下是否值得定义一个魔术

    2) 大多数情况下,没有。您必须导入模块,因为我们需要实时代码才能知道它是在哪里定义的

    一般来说,找到函数的代码并不总是非常容易。在Python3上,您始终可以访问code对象,但大多数情况下,一旦您拥有修饰函数或动态生成函数之类的内容,就变得很困难。我想你也可以从
    psource
    /
    pinfo2
    中获得灵感,让他们返回信息而不是分页