Introduction to Python/de

Einführung
Dies ist ein kurzes Tutorium für diejenigen, die neu bei Python sind. Python ist eine quelloffene, plattformübergreifende Programmiersprache. Sie verfügt über mehrere Funktionen, die sie von anderen Programmiersprachen unterscheidet, und ist für neue Benutzer sehr zugänglich:


 * Sie wurde so gestaltet, dass sie für Menschen lesbar ist, so dass sie relativ leicht zu erlernen und zu verstehen ist.
 * Sie wird interpretiert, das bedeutet, dass Programme nicht erst kompiliert werden müssen, bevor sie ausgeführt werden können. Python Code kann sofort ausgeführt werden, auch Zeile für Zeile, wenn du es wünschst.
 * Sie kann als Skriptsprache in andere Programme eingebettet werden. FreeCAD hat einen eingebetteten Python Interpreter. Du kannst Python Code schreiben, um Teile von FreeCAD zu verändern. Dies ist sehr mächtig, es bedeutet, daß du deine eigenen Werkzeuge bauen kannst.
 * Sie ist erweiterbar, du kannst einfach neue Module in deine Python Installation einbauen und deren Funktionalität erweitern. Zum Beispiel gibt es Module, die es Python erlauben, Bilder zu lesen und zu schreiben, mit Twitter zu kommunizieren, Aufgaben zu planen, die von deinem Betriebssystem ausgeführt werden sollen, usw.

Das Folgende ist eine sehr grundlegende Einführung und keineswegs ein vollständiges Tutorium. Aber sie wird hoffentlich einen guten Ausgangspunkt für die weitere Erforschung von FreeCAD und seinen Mechanismen bieten. Wir empfehlen dir dringend, die untenstehenden Code Schnipsel in einen Python Interpreter einzugeben.

Der Interpreter
Gewöhnlich öffnest du beim Schreiben von Computerprogrammen einen Texteditor oder deine spezielle Programmierumgebung (die im Grunde ein Texteditor mit einigen zusätzlichen Werkzeugen ist), schreibst dein Programm, kompilierst und führst es dann aus. Oftmals wurden bei der Eingabe ein oder mehrere Fehler gemacht, so dass dein Programm nicht funktioniert. Möglicherweise erhälst du sogar eine Fehlermeldung, die dir mitteilt, was schief gelaufen ist. Dann gehe zurück zu deinem Texteditor, korrigiere die Fehler, laufe erneut durch und wiederhole dies, bis dein Programm wie beabsichtigt funktioniert.

In Python kann dieser ganze Prozess transparent im Python Interpreter ausgeführt werden. Der Interpreter ist ein Python Fenster mit einer Eingabeaufforderung, wo du einfach Python Code eintippen kannst. Wenn du Python auf deinem Computer installiert hast (Herunterladen von der Python Webseite, wenn du es auf Windows- oder Mac benutzt, installiere es von deinem Paket Repositorium, wenn du auf GNU/ Linux installierst). Aber, wie bereits erwähnt, hat FreeCAD auch einen eingebauten Python Interpreter: die Python Konsole.



Wenn du sie nicht siehst, klicke auf. Die Python Konsole kann in der Größe verändert und auch wieder abgedockt werden.

Der Interpreter zeigt die Python-Version, dann ein Symbol, das ist die Eingabeaufforderung, das heißt, hier geben Sie Python-Code ein. Schreiben von Code im Interpreter ist einfach: eine Zeile ist eine Anweisung. Wenn du drückst, wird dein Code Zeile ausgeführt (nachdem sie sofort und unsichtbar kompiliert wurde). Zum Beispiel, versuche dies zu schreiben:

ist ein Python Befehl, der natürlich, etwas auf den Bildschirm druckt. Wenn du die drückst, wird die Operation ausgeführt, und die Nachricht  wird gedruckt. Wenn du einen Fehler machst, schreiben wir zum Beispiel:

Python wird dir dies sofort mitteilen. In diesem Fall weiß Python nicht, was ist. Die Zeichen geben an, dass der Inhalt eine Zeichenfolge ist, d.h. Programmierjargon für ein Stück Text. Ohne diese Zeichen erkennt der Befehl nicht. Durch Drücken des Pfeils nach oben kannst du zur letzten Codezeile zurückgehen und diese korrigieren.

Der Python Interpreter hat auch ein eingebautes Hilfesystem. Nehmen wir an, wir verstehen nicht, was mit schief gelaufen ist, und wir wollen konkrete Informationen über den Befehl:

Du erhältst eine lange und vollständige Beschreibung von allem, was der Befehl tun kann.

Jetzt, da du den Python Interpreter verstehst, können wir mit den ernsteren Dingen fortfahren.

Anfang

Variablen
Sehr oft musst du beim Programmieren einen Wert unter einem Namen speichern. An dieser Stelle kommen Variablen ins Spiel. Gib zum Beispiel dies ein:

Du verstehst wahrscheinlich, was hier passiert ist, wir haben die Zeichenfolge unter dem Namen  gespeichert. Jetzt, da bekannt ist, können wir sie überall verwenden, zum Beispiel im  Befehl. Wir können jeden beliebigen Namen verwenden, wir müssen nur einige einfache Regeln befolgen, wie z.B. keine Leerzeichen oder Interpunktion und keine Python Schlüsselwörter verwenden. Wir können zum Beispiel schreiben:

Nun ist nicht mehr undefiniert. Variablen können jederzeit geändert werden, deshalb nennt man sie Variablen, ihr Inhalt kann variieren. Zum Beispiel:

Wir haben den Wert von geändert. Wir können auch Variablen kopieren:

Es ist ratsam, deinen Variablen aussagekräftige Namen zu geben. Nach einer Weile wirst du dich nicht mehr daran erinnern, was deine Variable mit dem Namen darstellt. Aber wenn du sie zum Beispiel genannt hast, wirst du dich leicht an ihren Zweck erinnern. Außerdem ist dein Code einen Schritt näher an der Selbst-erklärend.

Der Fall ist sehr wichtig, ist nicht dasselbe wie. Wenn du eingeben würdest, würde es mit einem Fehler als nicht definiert zurückgegeben werden.

Anfang

Zahlen
Natürlich können Python Programme mit allen Arten von Daten umgehen, nicht nur mit Textzeichenfolgen. Eine Sache ist wichtig, Python muss wissen, mit welcher Art von Daten es zu tun hat. Wir haben in unserem Hallo Druck Beispiel gesehen, dass der Befehl unsere  Zeichenfolge erkannt hat. Durch die Verwendung von Zeichen haben wir festgelegt, dass das, was folgt, eine Textzeichenfolge ist.

Wir können immer den Datentyp einer Variablen überprüfen, mit dem Befehl:

Es wird uns sagen, der Inhalt von  ist ein, was die Kurzform für Zeichenfolge ist. Wir haben auch andere grundlegende Datentypen wie Integer und Gleitkomma Zahlen:

Python weiß, dass 10 und 20 ganze Zahlen sind, also werden sie als gespeichert, und Python kann mit ihnen alles machen, was es mit ganzen Zahlen machen kann. Schaue dir die Ergebnisse davon an:

Hier haben wir Python gezwungen, zu bedenken, dass unsere beiden Variablen keine Zahlen, sondern Textstücke sind. Python kann zwei Textstücke zusammenfügen, obwohl es in diesem Fall natürlich keine Arithmetik ausführt. Aber wir sprachen über ganze Zahlen. Es gibt auch Gleitkommazahlen. Der Unterschied ist, dass Gleitkommazahlen einen Dezimalteil haben können und Ganzzahlen nicht:

Ganzzahlen und Gleitkommazahlen können problemlos miteinander gemischt werden:

Da ein Gleitkommawert ist, entscheidet Python automatisch, dass das Ergebnis ebenfalls ein Gleitkommawert sein muss. Aber es gibt Fälle, in denen Python nicht weiß, welchen Typ es verwenden soll. Zum Beispiel:

Dies führt zu einem Fehler, ist eine Zeichenfolge und  ist eine ganze Zahl, und Python weiß nicht, was zu tun ist. Wir können Python jedoch zwingen, zwischen den Typen zu konvertieren:

Nun, da beide Variablen Zeichenfolgen sind, funktioniert die Operation. Beachte, dass wir zum Zeitpunkt des Drucks "zeichenfolgenfiziert" haben, aber  selbst nicht geändert haben. Wenn wir dauerhaft in eine Zeichenfolge verwandeln wollten, müssten wir dies tun:

Wir können auch und  einsetzen, um Werte zu konvertieren in Ganzzahlen und Gleitkommazahlen, wenn wir wollen:

Du hast sicher bemerkt, dass wir den Befehl auf verschiedene Weise verwendet haben. Wir haben Variablen, Summen, verschiedene durch Kommas getrennte Dinge und sogar das Ergebnis eines anderen Pythonbefehls gedruckt. Vielleicht hast du auch gesehen, dass diese beiden Befehle:

das gleiche Ergebnis haben. Das liegt daran, dass wir uns im Interpreter befinden, und alles wird automatisch ausgedruckt. Wenn wir komplexere Programme schreiben, die außerhalb des Interpreters laufen, werden sie nicht automatisch gedruckt, so dass wir den Befehl verwenden müssen. Mit diesem Gedanken im Hinterkopf sollten wir ihn hier nicht mehr verwenden. Von nun an werden wir einfach schreiben:

Anfang

Listen
Ein weiterer nützlicher Datentyp ist eine Liste. Eine Liste ist eine Sammlung von anderen Daten. Um eine Liste zu definieren, verwenden wir :

Wie du siehst, kann eine Liste jede Art von Daten enthalten. Mit einer Liste kannst du viele Dinge tun. Zum Beispiel kannst du deine Elemente zählen:

Oder ein Element abrufen:

Während der Befehl die Gesamtzahl der Elemente in einer Liste zurückgibt, steht das erste Element in einer Liste immer an der Position, so dass in unserer   wird an der Position  stehen. Mit Listen können wir viel mehr tun, z.B. Artikel sortieren und Artikel entfernen oder hinzufügen.

Interessanterweise ist eine Textzeichenfolge einer Liste von Zeichen in Python sehr ähnlich. Versuche dies zu tun:

Normalerweise kann das, was du mit Listen machen kannst, auch mit Zeichenketten gemacht werden. Tatsächlich sind sowohl Listen als auch Zeichenketten Sequenzen.

Neben Zeichenketten, Ganzzahlen, Gleitkommazahlen und Listen gibt es weitere eingebaute Datentypen, wie z.B. Wörterbücher, und du kannst sogar eigene Datentypen mit Klassen erstellen.

Anfang

Einrückung
Ein wichtiger Nutzen von Listen ist die Möglichkeit, sie "durchzublättern" und mit jedem Punkt etwas zu tun. Sieh dir zum Beispiel das hier an:

Wir iterierten (Programmierjargon) durch unsere Liste mit dem Befehl und machten etwas mit jedem der Punkte. Beachte die spezielle Syntax: Der Befehl endet mit  und zeigt an, dass es sich bei dem folgenden Befehl um einen Block mit einem oder mehreren Befehlen handelt. Im Interpreter wechselt die Eingabeaufforderung unmittelbar nach der Eingabe der Befehlszeile, die mit endet, zu, was bedeutet, dass Python weiß, dass noch mehr kommen wird.

Woher wird Python wissen, wie viele der nächsten Zeilen innerhalb der Operation ausgeführt werden müssen? Python verlässt sich dabei auf Einrückung. Die nächsten Zeilen müssen mit einem Leerzeichen, oder mehreren Leerzeichen, oder einem Tabulator, oder mehreren Tabulatoren beginnen. Und solange die Einrückung gleich bleibt, werden die Zeilen als Teil des Blocks betrachtet. Wenn du eine Zeile mit 2 Leerzeichen und die nächste mit 4 beginnst, gibt es einen Fehler. Wenn du fertig bist, schreibe einfach eine weitere Zeile ohne Einrückung, oder drücke, um vom Block zurückzukehren

Die Einrückung trägt auch zur Lesbarkeit des Programms bei. Wenn du beim Schreiben eines großen Programms große Einrückungen verwendest (z.B. Tabulatoren anstelle von Leerzeichen verwendest), hast du einen klaren Überblick darüber, was innerhalb von was ausgeführt wird. Wir werden sehen, dass auch andere Befehle eingerückte Codeblöcke verwenden.

Der Befehl kann für viele Dinge verwendet werden, die mehr als einmal ausgeführt werden müssen. Er kann z.B. mit dem Befehl kombiniert werden:

Wenn du die Code Beispiele in einem Interpreter durch Kopieren und Einfügen ausgeführt hast, wirst du feststellen, dass der vorherige Textblock einen Fehler auslöst. Kopiere stattdessen an das Ende des eingerückten Blocks, d.h. an das Ende der Zeile und füge dann im Interpreter ein. Drücke im Interpreter, bis die Eingabeaufforderung mit den drei Punkten verschwindet und der Code ausgeführt wird. Kopiere dann die letzten beiden Zeilen, gefolgt von einer weiteren. Die endgültige Antwort sollte erscheinen.

Wenn du in den Interpreter eintippst, wirst du sehen:

Hier bezeichnen die eckigen Klammern einen optionalen Parameter. Es wird jedoch erwartet, dass es sich bei allen Parametern um ganze Zahlen handelt. Im Folgenden erzwingen wir mit, dass der Schrittparameter eine ganze Zahl ist:

Ein weiteres Beispiel:

Der Befehl hat auch die seltsame Besonderheit, dass er mit  beginnt (wenn du die Startnummer nicht angibst) und dass seine letzte Nummer um eins kleiner ist als die von dir angegebene Endnummer. Das ist natürlich, damit es gut mit anderen Python Befehlen funktioniert. Zum Beispiel:

Eine weitere interessante Verwendung von eingerückten Blöcken ist der Befehl. Dieser Befehl führt einen Codeblock nur dann aus, wenn z.B. eine bestimmte Bedingung erfüllt ist:

Natürlich wird dabei immer der Satz gedruckt, aber versuche, die zweite Zeile zu ersetzen mit:

Dann wird nichts ausgegeben. Wir können auch eine Anweisung angeben:

Anfang

Funktionen
Es gibt nur wenige Standard Python-Befehle. In der aktuellen Version von Python gibt es etwa 30, und wir kennen bereits mehrere von ihnen. Aber stellen Sie sich vor, wir könnten unsere eigenen Befehle erfinden? Nun, wir können, und es ist extrem einfach. In der Tat, tun die meisten der zusätzlichen Module, die Sie in Ihrer Python-Installation zufügen, genau das, sie fügen Befehle hinzu, die Sie verwenden können. Ein benutzerdefinierter Befehl in Python wird eine Funktion genannt und wird so gemacht:

Extrem einfach: der def-Befehl definiert eine neue Funktion. Sie geben ihr einen Namen und innerhalb der Klammern Sie Argumente, die wir in unserer Funktionen benutzen werden. Argumente sind Daten, die an die Funktion übergeben werden. Schauen Sie sich zum Beispiel das len-Kommando an. Wenn Sie lediglich len schreiben, dann wird Python melden, dass es ein Argument benötigt. Das heißt, Sie möchten len von irgendwas, stimmt's? Dann schreiben Sie z.B. len(myList) und Sie bekommen die Länge von myList. Nun, myList ist ein Argument, dass Sie die len-Funktion übergeben. Die len-Funktion ist so definiert, dass sie weiß, was mit dem übergebenen Wert tun soll. Das Gleiche, was wir hier getan haben.

Die "myValue"-Bezeichnung kann alles sein, und sie wird nur innerhalb der Funktion benutzt. Es ist nur ein Name, den Sie dem Argument gegeben haben, damit Sie etwas damit tun können, aber es dient auch dazu, der Funktion mitzuteilen, wie viele Argumente zu erwarten sind. Wenn Sie z.B. dies tun:

gibt es einen Fehler. Unsere Funktion wurde programmiert, nur ein Argument zu erwarten, aber es erhielt zwei, 45 und 34. Wir könnten stattdessen folgendes tun:

Wir haben eine Funktion erstellt, die zwei Argumente bekommt und diesen Wert zurückgibt. Etwas zurückliefern ist sehr sinnvoll, denn wir können etwas mit dem Wert tun, wie etwa in der myTotal-Variable speichern. Da wir im Interpreter sind und alles ausgeben wird, erzeugt die Zeile

top

Module
Da wir jetzt einen guten Überblick haben, wie Python arbeitet, müssen wir abschließend noch eins wissen: Wie arbeitet man mit Dateien und Modulen.

Bis jetzt haben wir Python-Anweisungen Zeile für Zeile in den Interpreter eingegeben, stimmt's? Was, wenn wir mehrere Zeilen zusammenschreiben und sie alle gemeinsam ausführen könnten? Es wäre einfacher, um komplexere Dinge zu tun. Und wir könnten unsere Arbeit außerdem speichern. Nun, auch das ist sehr einfach. Öffnen Sie einen Text-Editor (wie das Windows-Notepad, Linux gedit, emacs oder vi) und schreiben Sie alle Ihre Python-Zeile, wie Sie das im Interpreter getan haben, mit Einrückungen, usw. Speichern Sie dann die Datei irgendwo, am besten mit einer .py-Endung. Dadurch haben Sie ein komplettes Python-Programm. Natürlich gibt es viel bessere Editoren als Notepad, aber es geht nur darum Ihnen zu zeigen, dass ein Python-Programm nichts anderes ist als eine Textdatei.

Um dieses Programm mit Python auszuführen, gibt es hunderte von Wegen. In Windows rechtsklicken Sie die Datei, öffnen sie mit Python und führen sie aus. Aber Sie können Sie auch vom Python-Interpreter ausführen. Dafür muss der Interpreter wissen, wo Ihr .py-Programm ist. In FreeCAD ist der einfachste Weg, Ihr Programm an einer Stelle abzulegen, die dem FreeCAD-Python-Interpreter bekannt ist, wie z.B. das FreeCAD-bin-Verzeichnis, oder eins der Mod-Verzeichnisse. (Unter Linux haben Sie vermutlich ein Verzeichnis /home//.FreeCAD/Mod, lassen Sie uns darunter ein Unterverzeichnis namens scripts erstellen, in dem wir die Textdatei ablegen). Nehmen wir an, wir schreiben eine Datei mit dem folgenden Inhalt:

und speichern sie als myTest.py in unserem FreeCAD/bin-Verzeichnis (oder auf Linux in /home//.FreeCAD/mod/scripts). Lassen Sie uns nun FreeCAD starten und im Interpreter-Fenster eingeben:

ohne die py-Endung. Dies wird einfach den Inhalt der Datei ausführen, Zeile für Zeile, so als hätten wir es im Interpreter eingegeben. Die sum-Funktion wird angelegt und die Meldung ausgegeben. Es gibt einen großen Unterschied: Das import-Kommando ist nicht nur gemacht, um Programme in Dateien auszuführen, sondern auch die darin enthaltenen Funktionen zu laden, so dass sie im Interpreter verfügbar sind. Dateien, die Funktionen enthalten, so wie unsere, werden Module genannt.

Normalerweise, wenn wir eine sum-Funktion im Interpreter eingeben, führen wir sie ganz einfach wie folgt aus

wie vorher aus. Wenn wir ein Modul mit unserer sum-Funktion importieren, ist die Syntax ein wenig anders. Wir schreiben:

Das bedeutet, das Modul wird als ein "Container" importiert und alle seine Funktionen sind intern. Das ist sehr nützlich, denn wir können eine Menge von Modulen importieren und alles bleibt gut organisiert. Allgemein, überall dort, wo Sie etwas.etwasAnderes sehen, mit einem Punkt dazwischen, bedeutet es, etwasAnderes ist innerhalb von etwas.

Wir können unsere sum-Funktion auch wie folgt direkt in den Interpreter-Hauptbereich importieren:

Generell verhalten sich alle Module auf diese Weise. Sie importieren ein Modul und Sie können die Funktionen benutzen: modul.funktion(argument). Fast alle Module tun das: sie definieren Funktionen, neue Datentypen und Klassen, die Sie im Interpreter oder Ihren eigenen Python-Modulen benutzen können, denn nichts hindert Sie daran, andere Module in Ihre Module zu importieren!

Ein letzter extrem nützlicher Punkt. Woher wissen wir, welche Funktionen verfügbar und wie sie zu benutzen sind (d.h., welche Art von Argumenten erwarten sie)? Wir haben bereits gesehen, dass Python eine help-Funktion hat. Ausführen von:

liefert uns eine Liste aller verfügbarer Module. Durch können durch Eintippen von q die interaktive Hilfe verlassen und irgendeins importieren. Wir können mit dem dir-Kommando sogar den Inhalt ansehen.

Wir sehen all die im math-Modul enthaltenen Funktionen, genau wie merkwürdiges Zeug namens __doc__, __file__, __name__. __doc__ ist sehr nützlich, denn es ist Dokumentation. Jede Funktion von (gut gemachten) Modulen hat einen __doc__-Abschnitt, der die Nutzung beschreibt. Wir sehen zum Beispiel, dass es eine sin-Funktion im math-Modul gibt. Wollen Sie wissen, wie man sie benutzt?

(Es mag nicht klar ersichtlich sein, aber auf jeder Seite von doc gibt es zwei Unterstriche).

Und abschließend ein letztes kleines Goodie: Wenn wir an einem neuen oder existierenden Modul arbeiten, ist es am besten, die Dateiendung durch .py zu ersetzen, also myModule.FCMacro => myModule.py. Wir werden es oft testen, also werden wir es wie oben gezeigt laden.

Es gibt jedoch eine Alternative:

Anfang

Loslegen mit FreeCAD
Hoffentlich hast du nun eine gute Vorstellung davon, wie Python funktioniert, und du kannst damit beginnen, zu erkunden, was FreeCAD zu bieten hat. Die Python Funktionen von FreeCAD sind alle gut in verschiedenen Modulen organisiert. Einige von ihnen sind bereits geladen (importiert), wenn du FreeCAD startest. Probiere einfach:

Anfang

Hinweise

 * FreeCAD wurde ursprünglich für die Arbeit mit Python 2 entwickelt. Da Python 2 im Jahr 2020 das Ende seiner Lebensdauer erreicht hat, wird die zukünftige Entwicklung von FreeCAD ausschließlich mit Python 3 erfolgen, und Rückwärtskompatibilität wird nicht unterstützt.
 * Viele weitere Informationen über Python findest du im offiziellen Python Tutorium und in der offiziellen Python Referenz.

Anfang