HSG |
|
In vielen Programmiersprachen kann man sich Variablen als Behälter für Daten vorstellen. Diese Vorstellung führt in Python zu Problemen.
In Python sind Variablen keine Behälter, sondern Namen für Objekte.
Die Tragfähigkeit dieser Vorstellung soll nun untersucht werden.
>>> a=1 >>> type(a) <type 'int'> >>> id(1) 9852440 >>> id(a) 9852440 >>> b=a >>> id(b) 9852440 >>>
Die Zuweisung a=1 kann man sich so vorstellen: Es wird ein Objekt '1' geschaffen. Dieses Objekt liegt irgendwo im Speicher und hat eine interne Nummer, die man mit der Funktion id herausbekommen kann. Das Objekt wird nun mit dem Namen a angesprochen, dh. a ist gewissermaßen die Adresse des Objekts oder ein Zeiger auf das Objekt. Die Zuweisung b=a ist dann so zu verstehen, dass b die gleiche Adresse wie a enthält. Das Objekt '1' kann jetzt also über die Namen a und b angesprochen werden. Als Beweis für diese Vorstellung lässt man sich die interne Nummer von b ausgeben. Sie stimmt mit der von a und 1 überein.
>>> a=2 >>> b 1 >>> b=3 >>> b 3 >>> id(a) 9852428 >>> id(b) 9852416 >>> id(1) 9852440 >>>
Was passiert, wenn auf gewisse Objekte kein Zeiger mehr zeigt? Solche Objekte sind auf normalem Weg nicht mehr ansprechbar und werden von Zeit zu Zeit automatisch entsorgt.
Die Anweisung, die einem Objekt einen neuen Namen gibt, heißt Zuweisung. In Python wird der Zuweisungsoperator mit = geschrieben und als '.. ergibt sich aus ..' gelesen. Der Zuweisungsoperator darf auf keinen Fall mit dem mathematischen '=' verwechselt werden. In Python wird das Ist-Gleich-Zeichen mit '==' geschrieben. Eine Zuweisung n = n + 1 ist sinnvoll, die Gleichung n = n + 1 nicht. Auf der rechten Seite einer Zuweisung darf eine Konstante stehen oder ein mehr oder minder komplizierter Ausdruck, der vor der eigentlichen Zuweisung ausgewertet wird. n = n + 1 ermittelt aus dem Wert des Objekts, auf das n deutet, und dem Wert des Objekts 1 ein neues Objekt und weist dem neuen Objekt den Namen n zu. Dh. n = n + 1 erhöht den Wert der Variablen n um 1. Das Objekt, das auf der rechten Seite durch den Namen n erreichbar war, ist nun nicht mehr unter diesem Namen erreichbar.
Starte die Python-Shell und gib a = 2 ('a ergibt sich aus 2', wer ' a ist gleich 2' liest, ist 'böse' :-) ) ein. Python scheint mit dieser Zuweisung zufrieden zu sein, es gibt keine Fehlermeldung. Wir kontrollieren, worauf a deutet und geben a ein. Damit lassen wir Python den Wert des Objektes ausgeben, auf das a deutet. Häufig setzt man im Alltag den Namen eines Objektes mit dem Objekt gleich.
Gib nun 2 = a ein. Python reagiert mit der Fehlermeldung 'SyntaxError: can't assign to literal' . Literale sind Zeichenketten mit denen z.B Zahlen dargestellt werden. Wir merken uns, dass Name der Variablen immer links stehen muss. Wir dürfen den Zuweisungsoperator '=' nicht mit dem gewohnten mathematischen =-Zeichen verwechseln. = im mathematischen Sinn wird in Python durch == ausgedrückt.
Jetzt gib die Zuweisung b = a ein. Worauf deutet jetzt die Variable b, kontrolliere durch Eingabe von b.
Welche Zuweisung gibt der Zeichenkette 'b' den Namen a? Kannst du zwischen dem Namen b und der Zeichenkette 'b' unterscheiden?
Bei der Namensgebung für Variablen ist man an gewisse Regeln gebunden, so löst etwa die Zuweisung 1Dutzend = 12 einen Syntaxfehler aus, weil Namen in Python mit einem Buchstaben oder dem Unterstrich _ beginnen müssen. Die weiteren Zeichen dürfen nur aus Buchstaben, Ziffern oder dem Unterstrich bestehen. Insbesondere sind keine Leerstellen in Namen erlaubt. Natürlich darf man auch keine vordefinierten Worte der Sprache Python (Schlüsselwörter) als Namen benutzen. Teste if = 42.
Welche Anweisungsfolge vertauscht den Wert der Variablen a und b?