Die Zuweisung in Python (Die Zuweisung in Python), Lektion, Seite 723908
https://www.purl.org/stefan_ram/pub/zuweisung_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Die Bindungsanweisung in Python 

Einführendes Beispiel

Durch die Ausführung der Bindungsanweisung  »x = 2« wird der gewöhnliche Bezeicher »x« an dasjenige Objekt gebunden, welches die Auswertung des Ausdrucks auf der rechten Seite des Gleichheitszeichens ergibt.

Protokoll (Anfang)
x = 2

Wenn der Name »x« direkt danach ausgewertet wird, so ergibt sich das Objekt, an das er gebunden ist.

Protokoll (Fortsetzung)
x
2
dir()
[ … 'x']

In vielen Fällen kann man so tun, als ob ein Name, der an ein Objekt gebunden ist, das Objekt selber sei.

Ein durch einen Bindungsanweisung erzeugter Name wird in die Bindungstabelle des Moduls, zu dem die Bindungsanweisung gehört, eingetragen. Ein Aufruf von »(dir)« ohne Argumente zeigt die Namen aus dem aktuellen Modul, und damit auch einen durch eine Bindungsanweisung erzeugte Namen, an.

Protokoll
dir()
[ … 'x']

Ein Name wird auch Variable  genannt (The Python Language Reference, Release 3.7.0a1; 4.2.1p4).

Wir hatte vorher schon from-Importe als Möglichkeiten kennengelernt, Einträge in der Bindungstabelle anzulegen.

Die beiden folgenden Anweisungen bewirken also in der Regel (bis auf vielleicht kleinste Abweichungen) dieselbe Änderung:

Anweisung
from math import pi
Anweisung
pi = 3.1415926535897932384626433832795029

Beispiel

Bindung
x = 5000
Auswertung
x == 5000
True

Syntax

Eine Bindungsanweisung besteht aus einem gewöhnlichen Bezeichner, einem Gleichheitszeichen »=« und einem Ausdruck.

Syntaxdiagramm (vereinfacht)

Bindungsanweisung

.--------------------------. .-. .----------.
--->| gewoehnlicher Bezeichner |--->( = )--->| Ausdruck |--->
'--------------------------' '-' '----------'

Anweisung

.---------------------------.
---.--->| Auswertungsanweisung |---.--->
| '---------------------------' |
| .---------------------------. |
'--->| from-Importanweisung |---'
| '---------------------------' |
| .---------------------------. |
'--->| Bindungsanweisung |---'
'---------------------------'

Anweisungen und Ausdrücke

Es ist typisch für viele Programmiersprachen, daß Ausdrücke in Anweisungen vorkommen können, aber fast nie Anweisungen in Ausdrücken. Insofern kann man sich Ausdrücke als kleinere Bausteine der Programmiersprache vorstellen und Anweisungen als etwas größere Bausteine, die auf den Ausdrücken aufbauen.

Während die Auswertung eines Ausdrucks immer Wert  ergibt, hat die Ausführung einer Anweisung nie einen Wert.

Sowohl die Auswertung eines Ausdrucks als auch die Ausführung einer Anweisung kann eine Änderung  hervorrufen.

Vereinfacht gesagt stehen Ausdrücke für Werte und Anweisungen für Änderungskommandos, jedoch kann – davon abweichend – auch die Auswertung eines Ausdrucks eine Änderung hervorrufen.

Semantik ⃖

Jedes Modul verfügt über eine Bindungstabelle, welche zu jedem Namen das Objekt enthält, an welches er gebunden ist.

Bei der Ausführung einer Bindungsanweisung wird zunächst ihr Ausdruck ausgewertet. Diese Auswertung ergibt ein Objekt.

Anschließend wird ein Attribut zur Bindungstabelle des Moduls hinzugefügt, der den Namen und das Objekt enthält.

Falls der Name in der Bindungstabelle des Moduls der Anweisung zuvor schon an etwas gebunden war, geht diese vorherige Bindung bei der Herstellung der neuen Bindung verloren.

Falls der Name später als Ausdruck verwendet wird, wird sein Wert dann der Bindungstabelle des Moduls entnommen.

Im Gegensatz zur Auswertungsanweisung erzeugt die Bindungsanweisung von sich aus keine Ausgabe.

Mehrfache Bindungen eines Objektes

An ein und dasselbe Objekt können mehrere Namen gebunden werden, die man in diesem Zusammenhang auch „Ziele“ nennt.

Protokoll

b = True

d = True

b

True
d
True
b is d
True

Oben wurden die Ziele »b« und »d« an das Objekt ›True‹ gebunden.

»b« und »d« sind nun zwei verschiedene Namen für das gleiche Objekt.

Zitat
Assignment statements in Python do not copy objects, they create bindings between a target and an object.
The Python Library Reference, Release 3.8.0a0, section 8.10

Umbindungen

Bei einer erneuten Bindung an einen Bezeichner, der schon an ein Objekt gebunden ist, wird die bisherige Bindung durch eine neue Bindung ersetzt.

Protokoll

x = 2

x = 'Ich war eine 2.'

x

'Ich war eine 2.'

Der gewöhnliche Bezeichner »x« war zunächst an das Objekt ›2‹ gebunden. Nach der Auswertung des Ausdrucks »x = 'Ich war eine 2.'« ist er aber nun an das Objekt ›'Ich war eine 2.'‹ gebunden.

Die Grundstrich-Variable ⃗

Durch ein Zuweisung (oder andere Anweisungen, die keine Auswertungsanweisungen sind) wird die Grundstrichvariable normalerweise nicht verändert.

Protokoll
2 + 3
5

x = 4

_

5

Die Grundstrichvariable kann aber auf der linken Seite der Zuweisung verwendet werden.

Protokoll
2 + 3
5

_ = 4

_

4

Übungsfragen

?   Übungsfrage ⃖

Welche Ausgabe erzeugt die Ausführung der folgende Anweisung?

Anweisung
x = 2

?   Übungsfrage ⃖

Welche Ausgabe erzeugt die letzte Zeile der folgende Konsoleneingabe?

Konsoleneingabe

x = 2

x + 1

?   Übungsfrage ⃖

Welche Ausgabe erzeugt die letzte Zeile der folgende Konsoleneingabe?

Konsoleneingabe

x = 2

x = 2 * x

x

Übungsaufgaben

Bei allen Übungsaufgaben dürfen ab jetzt beliebig viele benannte Hilfsobjekte als Teil der Lösung angelegt werden.

/   Übungsaufgabe

Schreiben Sie einen Quelltext, der den Wert des Namens »v« um «7» erhöht.

Beispielprotokoll
v = 20
Ihre Lösung 
v
27
Beispielprotokoll
v = 30
Ihre Lösung 
v
37
Beispielprotokoll
v = 20
Ihre Lösung 
Ihre Lösung 
v
34

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723908 stefan_ram:723908 Die Zuweisung in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723908, slrprddef723908, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/zuweisung_python