3 – Namen, Ausdrücke, Anweisungen

Einführung in Python und PsychoPy

Autor

Clemens Brunner

Veröffentlicht

16. Oktober 2025

Objekte, Werte und Typen

Alles in Python ist ein Objekt. Ein Objekt hat einen bestimmten Wert, z.B.

1
1
2.15
2.15
"Hallo"
'Hallo'
"3"
'3'
Tipp

Python gibt im interaktiven Modus Werte automatisch aus.

Jedes Objekt hat neben einem Wert auch einen bestimmten Typ. Mit type kann man den Typ eines beliebigen Objekts herausfinden:

type(1)
int
type(2.15)
float
type("Hallo")
str
type("3")
str

Man kann sich ein Objekt als eine Entität eines bestimmten Typs vorstellen, die einen bestimmten Wert hat und im Speicher des Computers lebt:

Ein Python-Objekt.

Jedes Objekt hat auch einen eindeutigen Identifikator. Mit der Funktion id kann man diesen herausfinden:

id(3)
139819899360112
id(4)
139819899360144

Die tatsächlichen Identifikationsnummern sind irrelevant (und sehr wahrscheinlich von Sitzung zu Sitzung unterschiedlich). Es ist nur wichtig, ob zwei Identifikationsnummern in einer laufenden Python-Sitzung identisch sind oder nicht. Im vorherigen Beispiel hat das Objekt 3 eine andere Identifikationsnummer als das Objekt 4, daher wissen wir, dass dies zwei verschiedene Objekte sind.

Namen

Namen in Python sind nichts anderes als Namen für bestimmte Objekte (in anderen Programmiersprachen werden Namen meistens als Variablen bezeichnet). Mit dem Zuweisungsoperator = können wir einem Objekt einen Namen geben:

a = 1

Einen Namen kann man sich als Etikett vorstellen, das an ein Objekt gehängt wird:

Der Name a ist dem Objekt 1 zugeordnet. Ein weiteres Objekt 2.4 hat (noch) keinen Namen.

In Python kann man einen existierenden Namen jederzeit einem anderen Objekt zuweisen. Dabei verliert der Name seine Verbindung zum alten Objekt (im folgenden Beispiel hat das Objekt 1 danach keinen Namen mehr):

a = 2.4

Nun ist a dem Objekt 2.4 zugeordnet, und das Objekt 1 hat keinen Namen mehr.

Ein Objekt kann auch mehr als einen Namen haben:

b = a

Jetzt hat das Objekt 2.4 zwei Namen a und b.

Wir können bestätigen, dass die Namen a und b auf dasselbe Objekt verweisen, indem wir ihre entsprechenden Identifikatoren überprüfen:

id(a)
139819422275632
id(b)
139819422275632

Tatsächlich sind sie identisch, es gibt also nur ein Objekt mit zwei Namen. Wenn wir überprüfen wollen, ob zwei Namen an ein und dasselbe Objekt gebunden sind, können wir auch das Schlüsselwort is als Abkürzung verwenden:

a is b
True

Der Typ eines Namens entspricht dem Typ des Objekts, auf das er verweist:

type(a)
float
type(b)
float

Wenn Python einen Namen verwendet, ersetzt es diesen Namen immer durch den Wert des entsprechenden Objekts. Außerdem wertet Python immer zuerst die rechte Seite einer Zuweisung aus, bevor es den Namen zuweist. Betrachten wir folgendes Beispiel:

x = 11
9 + x  # x wird zu 11 ausgewertet, dann wird 9 + 11 zu 20 ausgewertet
20

Nun hat x immer noch den Wert 11:

x
11

Wir können jetzt den Namen x einem anderen Objekt 2 zuweisen:

x = 2
2 * x  # x wird zu 2 ausgewertet, dann wird 2 * 2 zu 4 ausgewertet
4

An dieser Stelle hat x nach wie vor den Wert 2 (und nicht 4). Wir können x jedoch erneut zuweisen und sogar den alten Wert von x auf der rechten Seite der Zuweisung verwenden:

x = 2 * x  # zuerst wird die rechte Seite zu 2 * 2 = 4 ausgewertet, dann wird x = 4 zugewiesen
x
4

Gültige und gute Namen

Grundregeln

Gültige Namen können Buchstaben (Groß- und Kleinbuchstaben), Ziffern und Unterstriche enthalten (aber ein Name darf nicht mit einer Ziffer beginnen). Zusätzlich gibt es noch PEP8, welches Empfehlungen zur Auswahl guter Namen enthält. Vorerst ist nur eine Konvention für uns wichtig, nämlich dass alle Namen in Kleinbuchstaben geschrieben werden sollten und, wenn nötig, auch Unterstriche enthalten dürfen, wie z.B. lower_case_with_underscores.

Namen sollten Bedeutung vermitteln, daher sollte man anstelle eines generischen x oder i versuchen, einen Namen zu finden, der etwas über die beabsichtigte Verwendung aussagt. Außerdem ist es gute Praxis, englische (und nicht z.B. deutsche) Namen zu verwenden, da man nie weiß, wer den eigenen Code in Zukunft lesen wird.

Hier sind einige Beispiele für die Benennung eines Objekts, das die Anzahl der Schüler in einer Schulklasse darstellt:

number_of_students_in_class = 23  # zu lang
NumberOfStudents = 23  # falscher Stil, nicht mit Unterstrichen getrennt
n_students = 23  # sehr gut
n = 23  # wahrscheinlich zu kurz (aber manchmal OK)

Schlüsselwörter

Es gibt in Python vordefinierte Namen (sogenannte Schlüsselwörter oder englisch Keywords) – diese dürfen nicht als eigene Namen verwendet werden, da sie vom Python-Interpreter benötigt werden, um die Struktur eines Programmes zu erkennen. Mit folgenden Befehlen bekommt man eine Liste aller Schlüsselwörter:

import keyword
keyword.kwlist
['False',
 'None',
 'True',
 'and',
 'as',
 'assert',
 'async',
 'await',
 'break',
 'class',
 'continue',
 'def',
 'del',
 'elif',
 'else',
 'except',
 'finally',
 'for',
 'from',
 'global',
 'if',
 'import',
 'in',
 'is',
 'lambda',
 'nonlocal',
 'not',
 'or',
 'pass',
 'raise',
 'return',
 'try',
 'while',
 'with',
 'yield']

Das bedeutet zum Beispiel, dass man den Namen lambda nicht verwenden kann. Wenn man es doch tut, wird Python einen Fehler ausgeben:

lambda = 7
  Cell In[25], line 1
    lambda = 7
           ^
SyntaxError: invalid syntax

Eingebaute Funktionen

Neben Schlüsselwörtern gibt es aber auch sogenannte eingebaute Funktionen, die standardmäßig in Python verfügbar sind. Diese Funktionen kann man also ohne import direkt verwenden. Es ist nicht sinnvoll, diese Funktionen zu “überschreiben”, obwohl dies nicht explizit verboten ist. Eine Liste aller eingebauten Funktionen bekommt man mit folgendem Funktionsaufruf (beachten Sie, dass dir ebenfalls eine eingebaute Funktion ist):

dir(__builtins__)
Tipp

Wenn man wirklich einen Namen einer eingebauten Funktion verwenden möchte, ist es besser, den Namen leicht zu verändern, z.B. indem man einen Unterstrich anhängt. Anstelle von lambda könnte man daher lambda_ verwenden.

Operatoren

Operatoren sind spezielle Symbole, mit denen man Berechnungen wie Additionen, Subtraktionen usw. durchführen kann, also z.B. +, -, *, /, **, //, %, usw. Wir haben einige Operatoren bereits bei der Verwendung von Python als Taschenrechner kennengelernt. Manche Operatoren benötigen zwei Operanden (z.B. die Multiplikation 2 * 3), andere brauchen hingegen nur einen einzigen Operanden (z.B. die Negierung -5). Solche Operatoren werden als binäre bzw. unäre Operatoren bezeichnet.

Ausdrücke

Ein Ausdruck ist Code, der zu einem Wert ausgewertet (reduziert) werden kann. Das kann ein einzelner Wert (z.B. 42), ein Name (z.B. x) oder eine Kombination aus Werten, Namen und Operatoren (z.B. x + 2) sein. Hier sind einige Beispiele für Ausdrücke:

17  # nur ein Wert
17
23 + 4**2 - 2  # vier Werte und drei Operatoren
37
n = 25  # eine Zuweisung ist kein Ausdruck!
n + 5  # ein Name, ein Wert und ein Operator
30

Python reduziert einen Ausdruck immer auf einen einzigen Wert. Ein komplexerer Ausdruck wird schrittweise gemäß den Regeln der Operatorpräzedenz (z.B. Punkt- vor Strichrechnung) von links nach rechts ausgewertet. Wie bereits erwähnt, wertet Python zuerst die rechte Seite einer Zuweisung aus, bevor es einen Namen zuweist.

Anweisungen

Eine Anweisung ist eine Einheit Code, die Python ausführen kann. Dies ist eine recht breite Definition, und Anweisungen umfassen daher Ausdrücke als Sonderfall (ein Ausdruck ist also eine Anweisung mit einem Wert). Es gibt jedoch auch Anweisungen, die keinen Wert haben, wie z.B. eine Zuweisung. Hier sind zwei Beispiele für Anweisungen, die keine Ausdrücke sind:

x = 13
print("Hello world!")
Hello world!

Wenn man diese Anweisungen im interaktiven Interpreter ausführt, gibt es keine Ausgaben – der Grund dafür ist, dass diese beiden Anweisungen keine Werte haben, d.h. es gibt hier im interaktiven Modus des Python-Interpreters nichts, was ausgegeben werden könnte.

Hinweis

Dass der Aufruf der print-Funktion trotzdem eine Ausgabe am Bildschirm bewirkt, liegt an der Funktion, deren Zweck ja genau diese Ausgabe ist. Dies kann man sehen, wenn man dem Funktionsaufruf einen Namen zuweist:

s = print("Python")
Python

Der Typ des Wertes von print("Python"), der ja jetzt den Namen s hat, ist also:

type(s)
NoneType

Damit ist also klar, dass print("Python") keinen Wert hat (eigentlich None, denn in Python gibt es einen speziellen Wert None vom Typ NoneType, welcher für “kein Wert” steht).

Datentypen

Python bringt eine Menge nützlicher Datentypen mit. Im Folgenden werden die wichtigsten Typen aufgelistet und kurz beschrieben. Eine ausführliche Behandlung ausgewählter (wichtiger) Datentypen folgt dann in den nächsten Einheiten.

Logische Typen

Der Typ bool wird für Vergleiche verwendet; es gibt nur zwei mögliche Werte, nämlich True und False.

b = True
type(b)
bool
c = False
type(c)
bool

Numerische Typen

  • int (Ganzzahlen)
  • float (Dezimalzahlen)
  • complex (Komplexe Zahlen)
a = 17
type(a)
int
a = 23.221
type(a)
float

Aufgrund der begrenzten Rechengenauigkeit, mit denen Computer Dezimalzahlen darstellen, kann es zu Rundungsfehlern kommen (Dezimalzahlen können im Allgemeinen nicht exakt repräsentiert werden). Beispiel:

0.1 + 0.2
0.30000000000000004

Man sollte daher Dezimalzahlen nie miteinander vergleichen:

0.1 + 0.2 == 0.3
False
Hinweis

Statt Dezimalzahlen mit == zu vergleichen ist es besser, wenn man überprüft, ob der Unterschied zwischen den beiden Zahlen sehr klein ist. Dazu gibt es im math-Modul eine eigene Funktion math.isclose, die man wie folgt verwendet:

import math

math.isclose(0.1 + 0.2, 0.3)
True

Bei Ganzzahlen ist ein Vergleich aber kein Problem, da diese Zahlen exakt repräsentiert werden.

In speziellen Anwendungsfällen benötigt man komplexe Zahlen, welche direkt von Python unterstützt werden. Die imaginäre Einheit wird durch j dargestellt.

a = 3 + 5.5j
type(a)
complex

Sequenzen

Sequenzdatentypen können mehrere Elemente beinhalten. Folgende wichtige Sequenzdatentypen werden von Python unterstützt:

  • str (String bzw. Zeichenkette)
  • list (Liste)
  • tuple (ähnlich wie list, kann aber nachträglich nicht mehr verändert werden)
  • set (Ansammlung von unterschiedlichen Elementen, d.h. keine Duplikate)
s = "Python"
type(s)
str
s = 'String'
type(s)
str
k = [1, 2, 18.33, "Python", 44]
type(k)
list
t = 1, 2, 18.33, "Python", 44
type(t)
tuple
s = {1, 2, "test", "test", "test", 1, 2, 3}
s
{1, 2, 3, 'test'}
type(s)
set

Zuordnungen

Der Datentyp dict beinhaltet Wertepaare, also Schlüssel (Keys) und zugehörige Werte (Values). Dieser Mechanismus funktioniert ähnlich wie ein Wörterbuch, daher auch die englische Bezeichnung “dictionary”.

d = {"a": 12, "b": 3.14, 5: "Python", "c": "yes"}
type(d)
dict

Übungen

Übung 1

Gegeben seien folgende Anweisungen:

width = 17
height = 12
delimiter = "."

Geben Sie zu jedem der folgenden Ausdrücke dessen Wert und Typ an. Versuchen Sie zunächst, die Antworten durch Überlegen herauszufinden und verwenden Sie erst dann den Python-Interpreter zum Überprüfen Ihrer Antworten.

  • width / 2
  • height / 3
  • height * 3
  • height * 3.0
  • delimiter * 5
  • 2 * (width + height) + 1.5
  • 12 + 3
  • "12 + 3"

Übung 2

Was ist der Unterschied zwischen einem Ausdruck und einer Anweisung? Führen Sie jeweils ein Beispiel an.

Übung 3

Was sind Schlüsselwörter in Python und wie erhalten Sie eine Liste aller Schlüsselwörter? Was sind eingebaute Funktionen und wie erhalten Sie eine Liste aller eingebauten Funktionen? Was müssen Sie beim Erstellen von Namen im Zusammenhang mit diesen beiden Konzepten beachten?

Nennen Sie außerdem einige Richtlinien, wie man gute Namen erstellt. Führen Sie ein Beispiel für einen guten Namen an!

Übung 4

Wie groß ist die Oberfläche bzw. das Volumen einer Kugel mit einem Radius von \(r=5\)? Führen Sie die Berechnung mit Python durch und weisen Sie den Ergebnissen die Namen area bzw. volume zu. Verwenden Sie für den Radius den Namen r und setzen Sie den Wert von r auf 5.

Hinweis

Sie können die Zahl \(\pi\) als math.pi verwenden, wenn Sie folgende Zeile ganz am Anfang Ihres Scripts hinzufügen:

import math

Die Formel für die Oberfläche \(A\) einer Kugel lautet:

\[A = 4 \pi r^2\]

Das Volumen \(V\) einer Kugel kann man mit folgender Formel berechnen:

\[V = \frac{4}{3} \pi r^3\]

Übung 5

Mit welchem Befehl können Sie den Typ des Wertes True bestimmen? Um welchen Typ handelt es sich dabei? Welchen Typ hat der Name x, wenn Sie vorher x = "True" ausführen? Achtung: die Werte True und "True" in diesem Beispiel haben unterschiedliche Typen!

Wenn Sie in Übung 4 den Befehl import math ausgeführt haben, welchen Typ hat der Name math?