2013-12-18 8 views
10

教える目的関数のソースコードを(セルからの出力として)表示するIPythonノートブックが必要ですが、複数のノートブックでこれを参照できるようにしたいと考えています。したがって、%psourceの魔法を使用するのと同様の方法で機能コードを表示したいと思いますが、適切な構文が強調表示されています。IPythonノートブックでパッケージ関数のソースコードを表示する方法

これはthis questionと同様の質問ですが、完全なファイルではなく、ファイル内の1つの関数に同時に適用できます。

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. モジュール全体をインポートせずにこれを行う方法はありますか、これを行うにはより堅牢な方法がありますか?

答えて

5

1)Magicsは、私の記憶が正しければ、あなたが見hereCustomizing IPython - Config.ipynbを持つことができ、定義することは難しいことではない単純な関数です。私はそれがあなたのケースでは魔法の価値があるとは確信していません。

2)ほとんどの場合、モジュールがどこに定義されているか知るには、ライブコードが必要なので、モジュールをインポートする必要があります。

一般に、関数のコードを見つけることは、必ずしも容易ではありません。 Python 3では、コードオブジェクトにいつでもアクセスできますが、装飾された関数や動的に生成された関数があるとすぐに、ほとんどの場合、難しくなります。 psource/から刺激を受けて、ページングする代わりに情報を返させることもできます。

関連する問題