|
|
Zeile 1: |
Zeile 1: |
| ==Lernplan für die Python C-API== | | == Lernplan für Python == |
|
| |
|
| ===Schritt 1: Einführung in die Python C-API=== | | === Einführung === |
| * '''Ziel''': Grundlegendes Verständnis der Python C-API und ihrer Verwendung. | | * Was ist Python? |
| * '''Ressourcen''':
| | * Installation von Python |
| ** [https://docs.python.org/3/c-api/index.html Python/C API Reference Manual] | | * Erste Schritte mit Python |
| ** [https://docs.python.org/3/extending/extending.html Einführung in die Python C-API] | |
| * '''Aufgabe''': Lesen Sie die Einführung und machen Sie sich mit den grundlegenden Konzepten vertraut.
| |
|
| |
|
| ===Schritt 2: Einfache Python-Funktion aus C aufrufen=== | | === Grundlagen === |
| * '''Ziel''': Eine einfache Python-Funktion aus einer C-Anwendung aufrufen. | | * Variablen und Datentypen |
| * '''Beispiel''': | | * Operatoren |
| <syntaxhighlight lang="python">
| | * Bedingte Anweisungen (if, else, elif) |
| # example.py
| | * Schleifen (for, while) |
| def hello_world():
| |
| return "Hallo Welt"
| |
| </syntaxhighlight>
| |
| <syntaxhighlight lang="c">
| |
| // example.c
| |
| #include <Python.h>
| |
|
| |
|
| int main(int argc, char *argv[]) {
| | === Datenstrukturen === |
| Py_Initialize();
| | * Listen |
| PyRun_SimpleString("import example\n"
| | * Tupel |
| "result = example.hello_world()\n"
| | * Mengen |
| "print(result)");
| | * Wörterbücher |
| Py_Finalize();
| |
| return 0;
| |
| }
| |
| </syntaxhighlight>
| |
| * '''Aufgabe''': Kompilieren und ausführen des C-Programms. | |
|
| |
|
| ===Schritt 3: Komplexere Python-Funktionen aufrufen=== | | === Funktionen === |
| * '''Ziel''': Komplexere Python-Funktionen aus C aufrufen und deren Rückgabewerte verarbeiten. | | * Definition und Aufruf von Funktionen |
| * '''Beispiel''': | | * Argumente und Rückgabewerte |
| <syntaxhighlight lang="python">
| | * Lambda-Funktionen |
| # example.py
| |
| def add(a, b):
| |
| return a + b
| |
| </syntaxhighlight>
| |
| <syntaxhighlight lang="c">
| |
| // example.c
| |
| #include <Python.h>
| |
|
| |
|
| int main(int argc, char *argv[]) {
| | === Module und Pakete === |
| Py_Initialize();
| | * Importieren von Modulen |
| PyRun_SimpleString("import example\n"
| | * Erstellen eigener Module |
| "result = example.add(3, 4)\n"
| | * Verwendung von Paketen |
| "print(result)");
| |
| Py_Finalize();
| |
| return 0;
| |
| }
| |
| </syntaxhighlight>
| |
| * '''Aufgabe''': Kompilieren und ausführen des C-Programms. | |
|
| |
|
| ===Schritt 4: Fehlerbehandlung und Debugging=== | | === Fehlerbehandlung === |
| * '''Ziel''': Fehlerbehandlung und Debugging in der Python C-API verstehen. | | * Ausnahmebehandlung mit try, except |
| * '''Ressourcen''':
| | * Benutzerdefinierte Ausnahmen |
| ** [https://docs.python.org/3/c-api/exceptions.html Python/C API Error Handling]
| |
| * '''Aufgabe''': Fehler in den vorherigen Beispielen absichtlich einfügen und behandeln. | |
|
| |
|
| ===Schritt 5: Python-Objekte und -Typen=== | | === Fortgeschrittene Themen === |
| * '''Ziel''': Verstehen, wie man mit Python-Objekten und -Typen in C arbeitet. | | * Listen- und Dictionary-Komprehensionen |
| * '''Ressourcen''': | | * Generatoren und Iteratoren |
| ** [https://docs.python.org/3/c-api/objects.html Python/C API Object]
| | * Dekoratoren |
| ** [https://docs.python.org/3/c-api/type.html Python/C API Type] | | * Kontextmanager |
| * '''Aufgabe''': Erstellen und Manipulieren von Python-Objekten in C. | |
|
| |
|
| ===Schritt 6: Erweiterungsmodule schreiben=== | | === Objektorientierte Programmierung === |
| * '''Ziel''': Ein eigenes Python-Erweiterungsmodul in C schreiben. | | * Klassen und Objekte |
| * '''Beispiel''':
| | * Vererbung |
| <syntaxhighlight lang="c">
| | * Polymorphismus |
| // mymodule.c
| | * Kapselung |
| #include <Python.h>
| |
| | |
| static PyObject* mymodule_hello(PyObject* self, PyObject* args) {
| |
| return Py_BuildValue("s", "Hallo Welt");
| |
| }
| |
| | |
| static PyMethodDef MyModuleMethods[] = {
| |
| {"hello", mymodule_hello, METH_VARARGS, "Gibt 'Hallo Welt' zurück."},
| |
| {NULL, NULL, 0, NULL}
| |
| };
| |
| | |
| static struct PyModuleDef mymodule = {
| |
| PyModuleDef_HEAD_INIT,
| |
| "mymodule",
| |
| NULL,
| |
| -1,
| |
| MyModuleMethods
| |
| };
| |
| | |
| PyMODINIT_FUNC PyInit_mymodule(void) {
| |
| return PyModule_Create(&mymodule);
| |
| }
| |
| </syntaxhighlight>
| |
| * '''Aufgabe''': Kompilieren und das Modul in Python importieren.
| |
| | |
| ===Schritt 7: Abschlussprojekt===
| |
| * '''Ziel''': Ein kleines Projekt, das die erlernten Fähigkeiten kombiniert.
| |
| * '''Projektidee''': Ein C-Programm, das mehrere Python-Funktionen aufruft und die Ergebnisse verarbeitet.
| |
| | |
| ===Zusammenfassung===
| |
| * '''Ressourcen''': Nutzen Sie die offizielle Python-Dokumentation und Tutorials. | |
| * '''Übung''': Regelmäßiges Üben und Experimentieren mit der Python C-API. | |
| * '''Dokumentation''': Dokumentieren Sie Ihre Ergebnisse und Erkenntnisse. | |
| | |
| Viel Erfolg beim Lernen der Python C-API!
| |