2011-12-22 9 views
67

可能性の重複:
About python's built in sort() method組み込みのPython関数のソースコードを見つけるには?

機能に建てられたが、Pythonでどのように動作するかを確認する方法はありますか?私はそれらを使用するためにどれだけ意味するものではありませんが、またそれらがどのように構築された、背後にあるコードは...などを列挙またはを何ソートされていますか?

答えて

71

Pythonはオープンソースなので、source codeを読むことができます。

特定のモジュールまたは機能が実装されているファイルを確認するには、通常、__file__属性を出力します。または、inspectモジュールを使用することもできます。inspectのマニュアルのRetrieving Source Codeのセクションを参照してください。

組み込みのクラスとメソッドでは、inspect.getfileinspect.getsourceは、オブジェクトが組み込みであることを示す型エラーを返しますので、これはあまり簡単ではありません。ただし、組み込み型の多くはObjects sub-directory of the Python source trunkにあります。たとえば、列挙クラスの実装についてはherelistタイプの実装についてはhereを参照してください。

+0

あなたは 'enumerate'で例を挙げることができますか? – Benjamin

+2

列挙型ビルトインが[ここ](http://hg.python.org/cpython/file/b36cb4602e21/Lib/test/test_enumerate.py)でテストされている方法を見ることができます。 – Makoto

+3

列挙型コードはこちら[http://svn.python.org/view/python/trunk/Objects/enumobject.c?view=markup] –

14

iPythonシェルで簡単に作成できます。function?はドキュメントを提供します。 function??もコードを示しています。しかし、これは純粋なPython関数でのみ動作します。

次に、いつでもdownload(c)Pythonのソースコードを使用できます。

Pythonのコア機能の実装に興味がある場合は、PyPyソースをご覧ください。ここで

+1

PyPyはRPythonをほとんどの組み込みのものに使用しています。これは、Cと同じくらい低レベルにも、Pythonほどに高いレベルにもなります。通常は間にあります。どちらの場合でも、静的に型付けされているので、実際にはPythonではありません。 – delnan

+0

組み込み関数のソースコードを表示する初期のプロジェクトを参照してください:https://github.com/punchagan/cinspect – Thomas

20

は@クリスの答えを補完する料理の答えは、CPythonのは、GitHubのに移動したとMercurialのリポジトリは、もはや更新されません。必要に応じて

  1. はGitリポジトリをインストールします。
  2. git clone https://github.com/python/cpython.git

  3. コードcpythonと呼ばれるサブディレクトリにチェックアウトします - >cd cpython

  4. のは、我々はprint()の定義を探しているとしましょう...
  5. egrep --color=always -R 'print' | less -R
  6. なるほど! Python/bltinmodule.c - >builtin_print()

を参照してください。

4

あなたは単にhelp()コマンドを使用して、組み込み関数とそのコードについてのヘルプを得ることができます。

などのため

:あなたはSTR()のコードを見たい場合は 、単に入力 - help(str)

、それはこのように戻ります

>>> help(str) 
Help on class str in module __builtin__: 

class str(basestring) 
| str(object='') -> string 
| 
| Return a nice string representation of the object. 
| If the argument is a string, the return value is the same object. 
| 
| Method resolution order: 
|  str 
|  basestring 
|  object 
| 
| Methods defined here: 
| 
| __add__(...) 
|  x.__add__(y) <==> x+y 
| 
| __contains__(...) 
|  x.__contains__(y) <==> y in x 
| 
| __eq__(...) 
|  x.__eq__(y) <==> x==y 
| 
| __format__(...) 
|  S.__format__(format_spec) -> string 
| 
|  Return a formatted version of S as described by format_spec. 
| 
| __ge__(...) 
|  x.__ge__(y) <==> x>=y 
| 
| __getattribute__(...) 
-- More -- 
2

enter image description here

私が掘っていました検索結果として何千もの結果が得られるように、以下のソースを見つけるためには少し。Built-in Functionsとにかく

(それが元だ場所を見つけるために、それらのいずれかを探して幸運がある)、これらすべての機能がbltinmodule.c関数で定義されているbuiltin_{functionname}ビルトインソース

で始まる:https://github.com/python/cpython/blob/master/Python/bltinmodule.c

2

まったく不明なリソースは、Python Developer Guideです。

最近(幾分)GH issueに、あなたが求めている質問に対処するための新しい章が追加されました:CPython Source Code Layout変更が必要な場合は、そのリソースも更新されます。

関連する問題