4. Ausdrücke und Anweisungen

Ein Ausdruck (expression) ist eine Kombination von Operanden (Werten, Variablen) und Operatoren. Einige der Operatoren von Python sind:

  • +, -: Addition und Subtraktion
  • *, /: Multiplikation und Division
  • **, %: Exponentiation, Restbildung

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

  • Ausgabe: print
  • Zuweisung: a = 3
  • Funktionsaufruf: type(3)
  • Ausdruck: 2+4

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.

Syntax von Anweisungen

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.

Übungen zu diesem Abschnitt

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.


Markus Demleitner

Copyright Notice