2012-09-20 12 views
5

十分な文書がないサードパーティのライブラリ(パッケージとモジュール)を使用していることがよくあります。したがって、ソースコードの学習は必須となりますが、やや面倒な作業になる可能性もあります。私は(誰もが推測しているように)dir()help()の機能を使い始めると、最近私はinspectモジュールを使い始めました。私はひどく文書化されたコードに潜入するために使用する「方法」と、それを効率化する方法を知りたいと思います。大いに感謝します。Python:実用的なイントロスペクション

答えて

5

この種のタスクには、IPythonが不可欠です。 ?(show docstring)と??(show source)の魔法コマンドは、IPythonの優れた補完システムとライブオブジェクトのイントロスペクションと相まって、実際に私を変えてくれます。

例のセッションは:

In [1]: import sphinx.writers <TAB> 
# see available modules and packages - narrow down 

In [1]: import shpinx.writers.manpage as manpage 
In [2]: manpage.<TAB> 
# list and complete on the module's contents 

In [3]: manpage.Writer? 
# nicely formatted docstring follows 

In [4]: manpage.Writer?? 
# nicely formatted source code follows 

In [5]: %edit manpage 
# open module in editor 
# it really helps if you use something like ctags at this point 

In [6]: %edit manpage.Writer 
# open module in editor - jump to class Writer 

残念ながら、すべてのコードは、この方法を検査することができます。 は、if __name__ == '__main__'でラップせずにモジュール内でを実行するプロジェクトや、魔法に大きく依存しているプロジェクト(sh)を考えてください。

+1

@ gvalkov - +1 for IPython。 – root

2

http://pycallgraph.slowchop.com/またはdoxygenでコールグラフを作成したいと思います。

実際には、ASTモジュールであり、いくつかの場合、比較的無痛な統計解析が可能です。私がもっと欲しいのは、何らかの形で力学的解析を行うことです( "func1"と呼ばれるものの価値が変わり、呼び出しが完全に異なる可能性があるため)。

+0

@ Bob - + 1、それについて聞いたことがない、興味深いと思う。ありがとう。 – root

+0

@root:問題は、その統計的なコールグラフは、Pythonのような動的言語にとっては不十分かもしれないということです。 –

関連する問題