2009-11-13 6 views
64

私はPythonのソースコードを読んでいます。私はPythonのソースコードを読んでいます。どこから始めるべきですか

私の経験は、

私はPythonとJavaをよく知っています。私は様々なレベルの熟練度でいくつかの他の言語を知っていますが、C/C + /特にうまくいきません。私は大学でCを勉強しましたが、専門的にプログラムしたことはありません。

私はこのコードを読む理由。

  1. フードの中でのPythonの動作を理解してください。
  2. Learn C better。

は、どのように私はこれについて行く必要があるよりも、私にとってより重要なのですか?

+8

私はそれをしていないので私は助けることはできませんが、私は本当に返信に注意を払うでしょう:) – AntonioMO

+3

ひどい質問!なぜPythonソースを読んでいないのかわかりません。ソースへのリンクが必要ですか?質問はなんですか? –

+4

例:誰かが私にDjangoプロジェクトの読み方について質問した場合、私の答えは.. urls.pyから始め、app/projectが応答するurlを見てください。次に、モデルを見て問題のドメインのアイデアを得る。各URLに対応するビューを見てみましょう...私はそれがどのように構造化されているのか同様の答えが欲しいです。 – agiliq

答えて

34

まず、Python C APIについて学習します。これは大きくて豊富なAPIであり、Pythonソースは自然にそれを全面的に使用します。 Py_INCREFなどが何を意味しているかを理解する前に、Pythonのソースコードを詳しく調べることはありません。

Pyconで、API:A Whirlwind Excursion through Python C Extensionsについて説明しましたが、参考になるかもしれません。 C拡張は、Pythonコード自体と同じAPIを使用します。

+2

+1 for C API:Pythonにバッテリーを追加する機会はたくさんありますが、面白くありません。 –

+1

素晴らしいプレゼンテーション、非常に有益。 – mjgpy3

+0

あなたが与えたリンクはとても役に立ちました。ありがとう。 – Neil

5

質問はかなり広範囲にわたっているので、最高の答えはpython sourceをダウンロードしてナットしてください。よく知っているPythonのモジュールまたはセクションを選んで、フードの下のものを確認してください。

+1

+1 "LOL and go nuts" .. :) – Thiyagaraj

+0

元の質問にコメントを追加しました。これは "ナッツ"に役立ちます.. – agiliq

+0

あなたはdjangoソースに入りたいと思う人とあなたの状況を比較し、あなたは "urls.py"を見て始めなければならないと述べています。どうして?その最も重要なので、?私は、フット・アンダー・フード・アルゴリズムがどのような結果(そしてどのように)を生み出すかについての結論をより良くするために、よく知っているモジュールで始めるべきだと思います。 – Mizipzor

19

まず、1に興味がある人は、Pythonのさまざまなモジュールのソースを読むことから始めます(Cに直接ジャンプしないでください)。いくつかのモジュールのソースを読んでいることが分かったときは、いつもPythonプログラミングに関する新しいことを学んできました。

第2に、C言語を学ぼうとしているなら、私は個人的にまったく異なる何かを提案したいと思います。単に静的にソースコードを読むことはではなく、はCをよく理解できるようになるでしょう(少なくとも、それは限られたアプローチですが、それはあなたを少し良くするかもしれませんが、読んでいるソースがあなたを手に入れるほどです)。

少なくとも中程度のサイズのプロジェクトをC言語でプログラミングした後、を入力してからを探してみましょう。これは本当にC言語を知る唯一の方法ですが、C言語を知らなくてもPythonのC言語のソースを読むと、あなたはそれほど遠くには行きません。完了するにも近いことはないだろう明らかにC.でPythonインタプリタを書き、これはかなりのです:

Cプロジェクト実際に

のアイデアは、ここではCプロジェクトのためのアイデアですハードプロジェクトですが、言語の一部に集中すれば、それは良いアイデアだと思います。 、あなたはPythonでもののたくさんのより深い理解を持っている必要があります:

だけでなく、それはそれはあなたがソースを見ても、前に、多くの方のPythonを理解するのに役立ちます、あなたがCを学ぶのを助けます

最終的にPythonのコードを読んだときに、そのようなことがいくつか起こる理由を理解するだけでなく、おそらく多くのことを学ぶでしょうあなたが持っていた問題を解決するC技術。

13

1)まず、独自のPythonをビルドしてデバッガに実行できることを確認します。 印刷式を追加するだけでなく、ポイントで折れてコードフローに従うこともできます。 関数呼び出しをトレースできるツールがあれば、それが必要です。

2)データ型を実装するファイルから始めます。彼らは非常に理解しやすく、コードを読んでいる間にC言語のスキルを向上させます。

3)UMLダイアグラムを作成する - Argo UMLやMS Visioなどの簡単な描画ヘルパーツールを使用して、ここで役立ちます。コードフローを書き留めます。

4)pythonの起動コードを読んでください。基本的なインフラストラクチャが何でどのように初期化されているかをご覧ください。

6)Python側では100%の理解を深めるために、さらに難しい実装の詳細、ASTの内容、バインドされたメソッドとバインドされていないメソッド、実装方法について理解しています。 Pythonインタプリタを書く方法を覚えているモデルがあれば、最後のマスターステップに行くことができます。

7)提供されている高速デバッガC APIを使用してデバッガ拡張機能を作成します。 これはCのスキルを向上させるのに役立ちます。

8)最後のマスターステップを踏んで、インタプリタコードの中心に飛び込みます。これは、よく熟練したCプログラマーにとって、読んで理解することさえ困難です。式がどのように評価され、メソッドルックアップがキャッシュされ、フレームがスコーピングルールなどのために設定されているかを読む。複雑でコードの複雑さの点で、複雑で複雑です。

9)Adobe Photoshopを起動し、「Master of Python」卒業証書を作成し、オフィスの壁に貼り付けます。

+1

デバッガに実行する方法を教えてください。 – satoru

10

sourceをPythonのWebサイトからダウンロードしてください。ソースをPython-3.1.1という名前のディレクトリに解凍したとします。

  • はPythonの仮想マシンがinterperterから生成されたバイトコードを実行する方法を調べ:私はあなたがPythonがボンネットの下にどのように動作するかを探る役立つだろうPythonのソースコード内の2つの出発点を示唆しています。 Python VMは、Python-3.1.1/Python/ceval.cという名前のファイルにあります。 VMのコアは、ceval.cの関数PyEval_EvalFrameExで始まる評価ループです。ソースとインラインコメントを読んでください。私はあなたがそれを楽しむと確信しています。

  • もう1つの選択肢は、リスト、辞書、セットなどの組み込みのPythonデータ型がどのように実装されているかを調べることです。例えば、セットはPython-3.1.1/Objects/setobject.cに実装されています。 Objectsディレクトリには、他のデータ型の実装も含まれています。

+0

すべての情報は有用な情報です。おかげさまで、より多くの情報を提供していただけますか? – Neil

関連する問題