Seite 1 von 1

CPython

Verfasst: Sonntag 13. Juli 2014, 16:35
von Xfd7887a
Ich habe immer wieder von einer Verbindung zwischen C und Python gehört. Aber wie kann man sich das vorstellen? Geschwindigkeitskritische Teile werden mit C geschrieben, der Rest in Python? Wo gibt es gute Tutorials zu dem Thema?

Re: CPython

Verfasst: Sonntag 13. Juli 2014, 17:08
von snafu
@Xfd7887a: Anstatt sich selber mit der C-API von Python zu beschäftigen sollte man zuerst schauen, ob man den Algorithmus in Python verbessern kann durch geschicktes Umstrukturieren des Python-Codes. Für viele mathematiklastige Anwendungsfälle eignen sich außerdem Bibliotheken wie Numpy und SciPy. Zudem gibt es mit PyPy einen alternativen Interpreter zu CPython, der in vielen Fällen zu Geschwindigkeitszuwächsen bei der Codeausführung führt. Nicht zu vergessen noch Cython, welches eine Art Python mit C-artigen Typedeklarationen darstellt und den damit geschriebenen Python-Code zu C-Code kompiliert, wodurch einem die händische Erstellung abgenommen wird. Erst wenn das alles nicht geeignet erscheint, würde ich mich ernsthaft mit der C-API auseinandersetzen. Ansonsten überwiegen nämlich IMHO eher die Nachteile bezüglich Wartbarkeit, Fehleranfälligkeit und Zeit, die man zur Erstellung von händisch erstelltem C-API Code benötigt. Vielleicht willst du ja mal nach den Stichwörtern, die ich genannt hatte, recherchieren um dir ein Bild von den vielfältigen Möglichkeiten machen zu können...

Re: CPython

Verfasst: Sonntag 13. Juli 2014, 17:16
von BlackJack
Ergänzenz dazu würde ich auch das `ctypes`-Modul in der Standardbibliothek vorher noch ins Auge fassen bevor ich tatsächlich händisch Code gegen die Python C-API schreiben würde.

Re: CPython

Verfasst: Sonntag 13. Juli 2014, 17:25
von Xfd7887a
Naja, mir wurde jetzt empfohlen C zu lernen und ich dachte, dass könne man mit Python verbinden. Aber so einfach scheint das nicht zu sein.

Re: CPython

Verfasst: Sonntag 13. Juli 2014, 17:34
von BlackJack
@Xfd7887a: Doch C kann man mit Python ganz gut und eigentlich auch einfach verbinden — vorausgesetzt man kann Python und C.

Re: CPython

Verfasst: Sonntag 13. Juli 2014, 17:36
von Xfd7887a
Und wo findet man Tutorials dazu?

Re: CPython

Verfasst: Sonntag 13. Juli 2014, 18:09
von BlackJack
@Xfd7887a: Zu Python? Zu C? Zu `ctypes`? Zur CPython C-API? Zu Cython? Zu Numpy? Also ausser zu C haben alle anderen genannten eines in der jeweiligen Dokumentation oder zumindest dort verlinkt. Und C ist eine sehr alte Sprache die immer noch ziemlich aktiv verwendet wird. Da findet man sicher mehr Material als man im Leben verarbeiten kann.

Re: CPython

Verfasst: Sonntag 13. Juli 2014, 18:35
von snafu
In Verbindung mit der C-API die Sprache C zu lernen, ist zwar eine nette Idee, könnte einen Anfänger aber vor größere Hürden stellen. Ich würde empfehlen, sich erstmal ein paar Grundlagen in C an sich anzueignen und dann eher mit der GLib als Framework zu beginnen, um erste brauchbare Programme zu schreiben. Wenn man dann Bock hat, kann man sich immer noch mit so tollen Dingen wie dem Erstellen von Erweiterungsmodulen für Python mittels der C-API, dem ordentlichen Zusammenspiel mit Pythons Referenzverwaltung und ähnlichen Gemeinheiten befassen... :twisted:

Re: CPython

Verfasst: Montag 14. Juli 2014, 09:28
von jerch
@Xfd7887a:
Wenn Du jetzt C lernen willst nur um eine weitere Sprache zu nutzen und die Einsatzszenarien nicht abschätzen kannst, ist es vllt. nicht das Richtige für Dich.

Am unkompliziertesten ist IMHO die Nutzung von ctypes. Wenn man den C-Teil schon vorliegen hat, ist damit der Python-C Brückenschlag ein no-brainer. Alles was Du dafür brauchst, steht in der ctypes Dokumentation (https://docs.python.org/2/library/ctypes.html).

Re: CPython

Verfasst: Montag 14. Juli 2014, 11:03
von MagBen
Xfd7887a hat geschrieben:Ich habe immer wieder von einer Verbindung zwischen C und Python gehört. Aber wie kann man sich das vorstellen? Geschwindigkeitskritische Teile werden mit C geschrieben, der Rest in Python?
Im Prinzip ja.
Es gibt aber auch andere Gründe um aufzuteilen:

Testing
Wenn Du Deine C-Funktionen in Python zugänglich machst (z.B. mit Swig gewrappt hast), dann kannst Du sie interaktiv ausprobieren und kannst Deine Testfälle in Python entwickeln.

Flexibilität
Du schreibst kein C-Programm mehr, sondern nur eine C-Bibliothek. Das was üblicherweise in der main-Funktion passiert, das Erzeugen der Top-Level Objekte (OK ist C++, aber in C wird es was entsprechendes geben), das machst Du in Python. Je nachdem wie Du das Programm brauchst, kannst Du diese Top-Level-Objekte im Python Start-Script unterschiedlich zusammensetzen.

Ini-File-Parser
Anstatt in C einen Ini-File-Parser zu entwickeln, schreibst Du Deine Ini-Parameter direkt ins Python-Skript rein oder liest sie mit Python ein. Wenn Du dann auf einmal merkst, da wiederholt sich was in Deinen Ini-Dateien, dann schreibst Du einfach eine Python-Schleife, anstatt selbst eine Schleifensyntax in Deinem Ini-File-Format zu definieren.

Bevor Du aber sowas machst, solltest Du C aber schon können.