Ein Ausdruck (expression) ist eine Kombination von Operanden (Werten, Variablen) und Operatoren. Einige der Operatoren von Python sind:
Python kann Punkt vor Strich und Klammern:
>>> 2*3-4 2 >>> 2*(3-4) -2
Python kennt weit mehr Operatoren, so dass “Punkt vor Strich” nicht reicht, um zu schließen, welcher Teil eines Ausdrucks zuerst bewertet wird. Der komplette Regelsatz heißt Präzedenztabelle. Wir werden später darauf zurückkommen.
Nicht nur Zahlen können Operanden sein:
>>> "bla"*3 'blablabla' >>> "wahl"+"en" 'wahlen'
Eine Anweisung (statement) ist etwas, das den Interpreter veranlasst, etwas zu tun. Wir kennen schon
In der Tat ist ein Funktionsaufruf auch ein Ausdruck.
Werden Ausdrücke dem Interpreter interaktiv gegeben, gibt er deren Wert gleich aus.
>>> "hallo" 'hallo' >>> 4+3 7 >>> print 7,"hallo" 7 hallo
Die Zuweisung und Ausgabe sind keine Ausdrücke, sie haben demnach auch keinen Wert. Die Werte, die der Interpreter druckt, sind in der Regel in einem Format, das vom Interpreter wieder verstanden würde, mit print kann alles mögliche ausgegeben werden.
In Python ist auch “kein Wert” ein Wert, und zwar der spezielle Wert None. Der Python-Interpreter unterdrückt die Ausgabe von None. Mehr dazu später.
Der Klarheit halber: Ausdrücke sind Anweisungen, es gibt aber weit mehr Anweisungen als nur Ausdrücke. Dies ist jedenfalls in Python so, es gibt aber Programmiersprachen, in denen alles Ausdrücke sind (und für die deshalb das Konzept einer Anweisung sinnlos ist). Andere Sprachen realisieren bestimmte Konzepte anders, so ist in C die Zuweisung beispielsweise ein Ausdruck. Damit kann man Anweisungen wie a = (b = 4)+3 schreiben. In Python geht das nicht, was eine Designentscheidung von Pythons Autor Guido van Rossum war. Python unterstützt aber per Sprachdefinition Ausdrücke der Form a = b = 4, die den Wert ganz rechts allen Variablen davor zuordnet.
Dies sind jedoch alles Subtilitäten, die vorläufig nicht so wichtig sind.
Das zweite print-Beispiel oben zeigt übrigens, dass hinter einer print-Anweisung mehrere Werte durch Kommata getrennt stehen können. Python gibt sie dann durch Leerzeichen getrennt hintereinander aus. Endet eine print-Anweisung mit einem Komma, wird hinter der Ausgabe kein Zeilenvorschub ausgegeben. Wir werden später sehen, wie man die Ausgaben von Python-Skripten schöner gestalten kann.
Python erwartet in der Regel eine Anweisung pro Zeile, wobei eine Zeile (hoffentlich) so definiert ist, wie sie euer Editor auch sieht (etwas mehr dazu später im Kapitel über Dateien).
Allerdings können Anweisungen auch mal etwas länger werden. Es ist guter Stil, Zeilen nicht länger als etwa 72 Zeichen werden zu lassen, und so würde man dann und wann gerne eine Anweisung auf mehrere Zeilen verteilen. Python bietet dazu zwei Mechanismen an:
Erstens wird eine Anweisung implizit in der nächsten Zeile fortgesetzt, wenn noch eine Klammer offen ist (im interaktiven Interpreter bekommt ihr dann den Prompt “…”). So könnt ihr beispielsweise
someVariable = ((otherVariable+sillyExample)**yikes)*wobbadobba
als
someVariable = ( (otherVariable+sillyExample) **yikes )*wobbadobba
schreiben – die Einrückung von links, die sonst für Python relevant ist, ist dabei frei wählbar (und sollte natürlich so gewählt werden, dass die Struktur des Ausdrucks klarer wird). Das ganze geht nicht nur für runde Klammern, sondern auch für eckige und geschweifte, deren Funktion wir später kennen lernen werden.
Die andere Möglichkeit, Anweisungen aufzuteilen ist, einen Backslash ans Ende der ersten Teilzeile zu schreiben:
print something, other, yetSomethingElse
kann so auch als
print something, \ other, yetSomethingElse
geschrieben werden. Das sollte man offensichtlich nur tun, wenn sich keine Klammern anbieten.
Ihr solltet euch wenigstens an den rötlich unterlegten Aufgaben versuchen
(1)
Probiert ein paar mathematische Ausdrücke im Interpreter, also Dinge wie
>>> 4+2*4 >>> (4+2)*4 >>> 3*4**2 >>> (3*4)**2
Vergleicht das mit dem, was ihr aus der Schulmathematik mitgenommen habt.
(2)
Warum gibt
someVariable = ((otherVariable+sillyExample) **yikes) *wobbadobba
einen Syntaxfehler? Überlegt euch alle Stellen, an denen die Anweisung (ohne Backslash) umgebrochen werden kann und prüft eure Vermutungen mit dem Interpreter.