Muster von Zuweisungen in Python (Muster von Zuweisungen in Python), Lektion, Seite 724445
https://www.purl.org/stefan_ram/pub/zuweisungsmuster_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Muster von Bindungsanweisungen in Python 

In dieser Lektion zeigen wir einige Arten des Einsatzes von Bindungsanweisungen aus der Praxis. (Diese Auflistung ist nicht vollständig oder frei von Überlappungen ihrer einzelnen Abschnitte.)

Die absolute Bindungsanweisung

Bei einer absoluten Bindungsanweisung  wird ein Name an einen Wert gebunden, der bereits durch diese Bindungsanweisung selber festgelegt ist. Die Bindungsanweisung »b = 5« bindet den Namen »b« beispielsweise an den Wert «5».

Beispiel
b = 5

Die Benennung eines Ergebnisses

Bei der Benennung eines Ergebnisses  wird ein Name an den Wert eines Operatorausdrucks  oder eines Funktionsaufrufs  gebunden, der so für eine spätere Verwendung aufbewahrt werden kann.

Beispiel

from random import random

zufallszahl = random()

Beispiel
summe = 1 + 2 + 7 + 102

Die relative Bindungsanweisung

Bei einer relativen Bindungsanweisung  wird ein Name an einen Wert gebunden, der durch schon bestehende Bindungen von Namen mitbestimmt ist. Bei der folgenden relativen Bindungsanweisung wird der Name »a« an einen Wert gebunden, der durch die Bindungen der Namen »b« und »c« bestimmt wird.

Beispiel
a = b + c + 1

Die selbstbezügliche Bindungsanweisung

Bei einer selbstbezüglichen Bindungsanweisung  wird ein Name an einen Wert gebunden, der durch die bisherige Bindung desselben Namens  mitbestimmt ist.

Beispiel
a = a + b
Beispiel
a += b

Selbstbezügliche Bindungsanweisungen sind eine Spezialfall relativer Bindungsanweisungen.

Rein selbstbezügliche Bindungsanweisung

Bei einer rein selbstbezüglichen Bindungsanweisung  wird ein Name an einen Wert gebunden, der nur durch die Bindungsanweisung und die bisherige Bindung desselben Namens  bestimmt ist.

Beispiel
a = a * a + 5 * a - 2

Rein selbstbezügliche Bindungsanweisungen sind eine Spezialfall selbstbezüglicher Bindungsanweisungen.

Erhöhen

Beim Erhöhen  wird der Wert eines Namens um einen bestimmten Wert erhöht.

Beispiel
a += 5

Das Erhöhen ist eine Spezialfall einer rein selbstbezüglichen Bindungsanweisung.

Vermindern

Beim Vermindern  wird der Wert eines Namens um einen bestimmten Wert vermindert.

Beispiel
a -= 2

Das Vermindern ist eine Spezialfall einer rein selbstbezüglichen Bindungsanweisung.

Inkrementieren

Beim Inkrementieren  wird der Wert eines Namens um Eins erhöht.

Beispiel
a += 1

Das Inkrementieren ist eine Spezialfall des Erhöhens eines Namens.

Dekrementieren

Beim Dekrementieren  wird der Wert eines Namens um Eins vermindert.

Beispiel
a -= 1

Das Inkrementieren ist eine Spezialfall des Verminderns eines Namens.

Zählen

Beim Zählen  mit einem Namen wird dieser zunächst an die ganze Zahl «0» gebunden. Dieser Schritt wird Initialisierung  genannt. Danach wird immer, wenn etwas Bestimmtes passiert ist, der Name inkrementiert. Auf dieser Weise erreicht man es, daß der Name schließlich an diejenige Zahl gebunden ist, die angibt, wie oft der Name inkrementiert wurde (also, wie oft etwas Bestimmtes passiert ist).

Initialisieren (durch eine absolute Bindungsanweisung)
zaehler = 0
Inkrementieren
zaehler += 1
Inkrementieren
zaehler += 1
Inkrementieren
zaehler += 1

Der Name »zaehler« ist nun an die Zahl «3» gebunden, die nun angibt, wie oft der Name inkrementiert wurde (also wie oft etwas Bestimmtes passiert ist).

Der häufigste Fehler  beim Zählen ist das Vergessen (Weglassen) der Initialisierung.

Saldieren (Aufsummieren)

Beim Saldieren (Aufsummieren) werden verschiedene Zahlen zum Wert eines Namens hinzuaddiert, so daß der Name schließlich an die Summe  all jener Zahlen gebunden ist. Dies ist eine Möglichkeit, die Summe von Zahlen zu ermitteln.

Initialisieren (durch eine absolute Bindungsanweisung)
saldo = 0
Erhöhen
saldo += 2
Erhöhen
saldo += 3
Erhöhen
saldo += 2

Der Name »saldo« ist nun an die Zahl «7», die Summe der Werte «2», «3» und «2», gebunden.

Auch hier ist darauf zu achten, die Initialisierung mit Null nicht zu vergessen.

Zerlegen verschachtelter Ausdrücke in mehrere Schritte

Bei verschachtelten Ausdrücken  stimmt die Reihenfolge der Ausführung nicht immer mit der Reihenfolge im Quelltext überein (»input« steht im folgenden Beispiel hinter  »print«, wird aber vorher  ausgeführt). Außerdem ist es manchmal schwierig zu erkennen, welche schließende  Klammer zu welcher öffnenden  Klammer gehört.

Verschachtelte Ausdrücke
print( int( input() ) + int( input() ))

Durch Einführung von Namen  für die Werte der verschiedenen Teilausdrücke (Operanden und Argumente), also durch die Benennung von Ergebnissen, können beide Probleme vermieden werden.

Mehrere Schritte

eingabe_0 = input(); zahl_0 = int( eingabe_0 )

eingabe_1 = input(); zahl_1 = int( eingabe_1 )

summe = zahl_0 + zahl_1

print( summe )

Die Einführung vieler Namen und Vergrößerung der Länge des Quelltextes kann aber auch wieder als nachteilig angesehen werden, da auch sie die Lesbarkeit verschlechtern kann. Es ist nicht möglich, objektiv zu sagen, welche Variante besser ist. Dies muß jeder Autor selber entscheiden.

Ein Kompromiß kann darin bestehen, einige Verschachtelungen noch zu akzeptieren und nicht zu viele Namen einzuführen. Das folgende Beispiel führt gegenüber dem ursprünglichen Beispiel nur einen weiteren Namen ein und verteilt die zehn Klammern auf drei verschiedene Anweisungen, so daß jede Anweisung nur noch maximal vier Klammern enthält.

Kompromiß

saldo = 0

saldo += int( input() )

saldo += int( input() )

print( saldo )

Retten und Wiederherstellen

Manchmal soll ein bestimmter Wert nur vorübergehend  verändert werden. Beispielsweise soll der Name »v« vielleicht vorübergehend an den Wert «99» gebunden werden, obwohl er bereits einen Wert hat, den wir hier als den „alten Wert“ bezeichnen.

In diesem Fall kann der alte Wert von »v« an einen anderen Namen  gebunden werden, der noch ungebunden ist, wie beispielsweise »old_v«. Dann kann der Wert von »v« verändert werden. Da der alte Wert aber noch an »old_v« gebunden ist, ist es möglich »v« schließlich wieder an seinen alten Wert zu binden.

Beispiel
old_v = v
Beispiel
v = 99
Beispiel
v = old_v

Im folgenden Beispiel wird eine Einstellung mit Hilfe von ›setrecursionlimit‹ auf den Wert «2000» gesetzt. Zuvor wurde aber der bisherige Wert der Einstellung mit Hilfe von »getrecursionlimit()« ausgedrückt und an den Namen »old« gebunden. Dadurch ist es dann möglich, die Einstellung später wieder auf diesen ursprünglichen Wert zurückzusetzen. Dies ist beispielsweise dann passend, wenn der Wert zwar vorübergehend verändert werden muß, der ursprüngliche Wert aber normalerweise besser ist.

Skript

from sys import getrecursionlimit, setrecursionlimit

old = getrecursionlimit() # Retten

setrecursionlimit( 2000 )

# ...

setrecursionlimit( old ) # Wiederherstellen

 

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 stefanram724445 stefan_ram:724445 Muster von Zuweisungen in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724445, slrprddef724445, 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/zuweisungsmuster_python