Ich möchte den Python-Quellcode lesen. Wo soll ich anfangen [geschlossen]

78

Ich möchte den Python-Quellcode lesen.

Meine Erfahrung,

Ich kenne Python und Java sehr gut. Ich kenne einige andere Sprachen auf verschiedenen Sprachniveaus, aber weder C / C + / noch besonders gut. Ich habe C am College studiert, aber noch nie professionell darin programmiert.

Meine Gründe für das Lesen dieses Codes.

  1. Verstehe, wie Python unter der Haube funktioniert.
  2. Lerne C besser.

1 ist mir wichtiger als 2.

Wie soll ich das machen?

agiliq
quelle
8
Gute Frage! Ich kann nicht helfen, weil ich es nicht getan habe, aber ich werde wirklich auf die Antworten achten :)
AntonioMO
3
Schreckliche Frage! Ich kann nicht verstehen, warum Sie nicht einfach angefangen haben, die Python-Quelle zu lesen. Benötigen Sie den Link zur Quelle? Was ist die Frage?
S.Lott
6
Beispiel: Wenn mich jemand gefragt hätte, wie ich ein Django-Projekt lesen soll, wäre meine Antwort .. Beginnen Sie mit der URL.py und sehen Sie, auf welche URLs die App / das Projekt reagiert. Schauen Sie sich als nächstes das Modell an, um eine Vorstellung von der Problemdomäne zu erhalten. Schauen Sie sich nun die Ansichten an, die jeder URL entsprechen ... Ich möchte eine ähnliche Antwort auf die Struktur.
Agiliq
@uswaretech: Bitte kommentieren Sie Ihre eigene Frage nicht. Ihnen gehört die Frage. Bitte korrigieren Sie es, um anzugeben, was Sie wirklich wissen möchten. Ihre Frage ist - wie geschrieben - unverständlich. Bitte aktualisieren Sie die Frage, anstatt Kommentare hinzuzufügen.
S.Lott
6
Warum sind so schöne Fragen geschlossen?
Neil

Antworten:

45

Beginnen Sie mit dem Erlernen der Python C-API. Es ist eine große und reichhaltige API, und die Python-Quelle verwendet sie natürlich überall. Sie werden nicht sehr weit in den Python-Quellcode vordringen, bevor Sie verstehen müssen, was unter Py_INCREF usw. zu verstehen ist.

Ich habe auf Pycon eine Präsentation gehalten, in der die API erklärt wurde: Ein Wirbelwind-Ausflug durch Python C-Erweiterungen , die Sie möglicherweise hilfreich finden. C-Erweiterungen verwenden dieselbe API wie der Python-Code.

Ned Batchelder
quelle
2
+1 für C API: Es gibt so viele Möglichkeiten, Python Batterien hinzuzufügen, dass es nicht lustig ist.
Jed Smith
1
Tolle Präsentation, sehr informativ.
mjgpy3
Der Link, den Sie gegeben haben, war sehr nützlich. Vielen Dank.
Neil
22

Wenn Sie hauptsächlich an 1 interessiert sind, würde ich zunächst die Python-Quelle verschiedener Module lesen (und nicht direkt zum C springen). Immer wenn ich die Quelle einiger Module las, habe ich neue Dinge über die Python-Programmierung gelernt.

Zweitens, wenn Sie versuchen, C besser zu lernen, würde ich persönlich etwas völlig anderes vorschlagen: Programm darin. Nur statisch Quellcode zu lesen ist nicht dazu bringen, C besser zu verstehen (oder zumindest ist es ein begrenzter Ansatz; es könnte Sie ein wenig besser machen, aber es gibt nur so viel, dass das Lesen der Quelle Sie bringt).

Nachdem Sie mindestens ein mittelgroßes Projekt in C programmiert haben, dann würde ich in Python Quelle beginnen suchen. Das ist wirklich der einzige Weg, um C besser zu kennen, und ich denke wirklich, dass das Lesen der C-Quelle von Python, ohne C gut zu kennen, Sie nicht sehr weit bringt.

Eine Idee für ein C-Projekt

Tatsächlich ist hier eine Idee für ein C-Projekt: Schreiben Sie einen Python-Interpreter in C. Offensichtlich wird es nicht einmal annähernd abgeschlossen sein, und dies ist ein ziemlich schwieriges Projekt, aber wenn Sie sich nur auf einige Teile der Sprache konzentrieren, ich Ich denke, es ist eine gute Idee.

Es wird Ihnen nicht nur helfen, C zu lernen, es wird Ihnen auch helfen, Python viel besser zu verstehen, noch bevor Sie sich die Quelle ansehen: Sie müssen ein tieferes Verständnis für vieles haben Dinge in Python haben, Sie werden die Design-Kompromisse verstehen wie Python funktioniert usw.

Wenn Sie dann endlich Pythons Code lesen, werden Sie nicht nur verstehen, warum manche Dinge so funktionieren, sondern wahrscheinlich auch viele wirklich coole C-Techniken lernen, die Probleme lösen, die Sie hatten.

Edan Maor
quelle
15

1) Stellen Sie zunächst sicher, dass Sie Ihr eigenes Python erstellen und es in einem Debugger ausführen können. Sie können also nicht nur Druckausdrücke hinzufügen, sondern auch an Punkten brechen und dem Code-Fluss folgen. Wenn Sie über Tools verfügen, mit denen Sie Funktionsaufrufe nachverfolgen können, benötigen Sie diese.

2) Beginnen Sie mit der Datei, die die Datentypen implementiert. Sie sind sehr leicht zu verstehen und Sie verbessern Ihre C-Sprachkenntnisse beim Lesen des Codes.

3) Erstellen Sie UML-Diagramme - einfache Hilfsmittel zum Zeichnen wie Argo UML oder MS Visio können Ihnen hier helfen. Notieren Sie den Code-Fluss.

4) Lesen Sie den Startcode für Python. Sehen Sie, was und wie die Basisinfrastruktur initialisiert wird.

6) Ty, um die Python-Seite zu 100% zu verstehen - selbst die schwierigeren Implementierungsdetails, was ein AST ist und welche gebundenen und ungebundenen Methoden sind und wie Sie sie implementieren würden. Wenn Sie ein Modell im Sinn haben, wie Sie einen Python-Interpreter schreiben würden, können Sie mit dem letzten Hauptschritt fortfahren.

7) Schreiben Sie eine Debugger-Erweiterung mit der bereitgestellten schnellen Debugger-C-API. Dies hilft Ihnen, Ihre C-Fähigkeiten zu verbessern.

8) Machen Sie den letzten Master-Schritt und tauchen Sie in das Herz des Interpreter-Codes ein. Dies ist für einen erfahrenen C-Programmierer sogar schwer zu lesen und zu verstehen. Lesen Sie, wie Ausdrücke ausgewertet und Methodensuchen zwischengespeichert werden, Frames für Gültigkeitsbereichsregeln eingerichtet werden usw. Es ist schwierig und komplex - in Bezug auf Komplexität und Codezeilen.

9) Starten Sie Adobe Photoshop, erstellen Sie ein gut aussehendes "Master of Python" -Diplom und hängen Sie es an Ihre Bürowand.

Lothar
quelle
2
Würden Sie mir bitte sagen, wie ich einen Debugger ausführen soll?
Satoru
12

Laden Sie die Quelle von der Python-Website herunter. Angenommen, Sie haben die Quelle in ein Verzeichnis mit dem Namen Python-3.1.1 entpackt. Ich schlage Ihnen zwei Ausgangspunkte im Python-Quellcode vor, anhand derer Sie untersuchen können, wie Python unter der Haube funktioniert:

  • Untersuchen Sie, wie die Python Virtual Machine den vom Interperter generierten Bytecode ausführt. Die Python-VM befindet sich in der Datei Python-3.1.1 / Python / ceval.c. Der Kern der VM ist eine Eval-Schleife, die bei der Funktion PyEval_EvalFrameEx in ceval.c beginnt. Lesen Sie die Quelle und die Inline-Kommentare durch. Ich bin sicher, Sie würden es genießen.

  • Eine weitere Option besteht darin, zu untersuchen, wie integrierte Python-Datentypen wie Listen, Wörterbücher und Mengen implementiert werden. Zum Beispiel sind Sets in Python-3.1.1 / Objects / setobject.c implementiert. Das Objects-Verzeichnis enthält auch Implementierungen anderer Datentypen.

ardsrk
quelle
1
Jede Information ist eine nützliche Information. Danke, können Sie bitte weitere Hinweise geben, um loszulegen?
Neil
5

Die Frage ist ziemlich weit gefasst, daher denke ich, dass die beste Antwort darin besteht, einfach die Python-Quelle herunterzuladen und verrückt zu werden. Wählen Sie ein Modul oder einen Abschnitt von Python aus, den Sie gut kennen, und überprüfen Sie, was sich unter der Haube befindet.

Mizipzor
quelle
2
+1 - LOL bei "und verrückt werden" .. :)
Thiyagaraj
Ich habe der ursprünglichen Frage einen Kommentar hinzugefügt, der mir helfen wird, verrückt zu werden.
agiliq
Sie vergleichen Ihre Situation mit jemandem, der in die Django-Quelle einsteigen möchte. Sie geben an, dass man sich zunächst "urls.py" ansehen sollte. Warum? Weil es das wichtigste ist? Ich bin anderer Meinung, ich denke, Sie sollten mit einem Modul beginnen, mit dem Sie sehr vertraut sind, um besser Schlussfolgerungen darüber zu ziehen, welches Ergebnis (und wie) die Algorithmen unter der Haube liefern.
Mizipzor