2012-06-28 9 views
5

が短くなるために、私はPythonメソッドのソースコードをチェックするには?

next = "123rpq" 

文字列'next'を、持っていると仮定し、私は'next'str方法.isdigit()を適用することができます。だから私の質問は、このメソッドの実装をチェックする方法です。したがって、 'method'のソースコードを取得するのにはinspect.getsource(somefunction)のようなものがありますか?

更新:下記の変数名'next'に関するコメントを参照してください。

+2

変数「next」は、組み込みの 'next'をシャドウするので、「next」を呼んではいけません。 – Matthias

+0

@Matthias、ありがとう。 –

答えて

7

モジュール、クラス、関数、およびその他のオブジェクトの場合は、inspect.getfileまたはinspect.getsourcefileを使用できます。しかし、組み込みのオブジェクトやメソッドの場合、結果はTypeErrorになります。 C0deH4ckerが示すように、組み込みオブジェクトとメソッドはC言語で実装されているので、Cソースコードを参照する必要があります。 isdigitは組み込み文字列オブジェクトのメソッドで、PythonのソースコードのObjectsディレクトリのファイルstringobject.cに実装されています。このisdigitsメソッドは、このファイルの3392行から実装されています。私の答えhereも同様ですが、より一般的な質問にしてください。

0

method.__doc__を印刷して、その特定の方法に関するドキュメントを試すことができます。好奇心が強い場合は、PYTHONPATHをチェックして、モジュールがどこからインポートされたかを確認し、そのモジュールから.pyファイルがあるかどうかを確認することができます。

+1

'help(str.isdigit)' –

+0

@Pablo、ありがとうございます。あなたは私の質問にその事例を使って私に例を与えることができますか? 'next.isdigit()'のソースコードをどのように表示するのですか? –

+0

@AshwiniChaudharyによると、ヘルプ(str.isdigit)またはstr.isdigit .__ doc__を書くことができます –

6

isdigit()メソッドは、データ・タイプ。つまり、このメソッドのソースはPythonではなくCで書かれています。本当にそのソースコードを見たい場合は、http://python.orgに行き、Pythonのソースコードをダウンロードすることをお勧めします。

0

inspectは良い答えですが、あなたのクラス(したがってクラスメソッド)がインタプリタで定義されていれば、それはフラットになります。

dillから使用すると、対話的に定義されていても、関数とラムダのソースを取得できます。 また、カリスマで定義されたバインドされたクラスメソッドやバインドされていないクラスメソッドや関数からコードを取得することもできますが、そのコードを囲むオブジェクトのコードなしでコンパイルできない場合があります。 builtin関数やメソッドについては

>>> from dill.source import getsource 
>>> 
>>> def add(x,y): 
... return x+y 
... 
>>> squared = lambda x:x**2 
>>> 
>>> print getsource(add) 
def add(x,y): 
    return x+y 

>>> print getsource(squared) 
squared = lambda x:x**2 

>>> 
>>> class Foo(object): 
... def bar(self, x): 
...  return x*x+x 
... 
>>> f = Foo() 
>>> 
>>> print getsource(f.bar) 
def bar(self, x): 
    return x*x+x 

>>> 

dill.sourceは動作しません... ...しかし

あなたはまだで提案されているように(これでソースコードを含むファイルを開くために、お気に入りのエディタを使用してに頼るする必要はありませんその他の回答)。 builtinsのソースを表示できるとしているcinspectという新しいパッケージがあります。

関連する問題