Programmieren: Paradigmen: Variablen
Aus Wikibooks
Es gibt vieles über das Konzept der Variablen zu schreiben. Der untenstehende Extrakt ist aus dem Buch Python unter Linux übernommen, s. hier.
[Bearbeiten] Zahlentypen
Es gibt in Python mehrere Zahlentypen. Normalerweise muss man sich beim Programmieren nicht darum kümmern, weil Python automatisch den richtigen Typ auswählt. In einigen Ausnahmefällen tun die Programme jedoch nicht das Erwartete, wenn die falschen Typen aufeinandertreffen. Ein Beispiel soll das illustrieren:
#!/usr/bin/python #seltsame Ergebnisse print "1 / 2 = " + str(1/2) print "1 / 2.0 = " + str(1/2.0) print "1.0 / 2 = " + str(1.0/2)
user@localhost:~$ ./types.py
1 / 2 = 0
1 / 2.0 = 0.5
1.0 / 2 = 0.5
Das angedeutete Phänomen, dass 1/2=0 sein soll, hängt mit den Typen der Zahlen zusammen. Python kennt (wie viele andere Sprachen) ganze Zahlen mit festem Wertebereich (int) und Fließkommazahlen (float). Zusätzlich gibt es in Python noch komplexe Zahlen (complex) und beliebig lange ganze Zahlen (long). Die Rechenoperationen bleiben normalerweise in ihrem jeweiligen Typ, d.h. eine Division von zwei ints liefert wieder einen int - selbst wenn das "korrekte" Ergebnis eine Kommazahl wäre. Um diesen Fallstrick zu umgehen, muss eine der beiden Zahlen durch Anhängen von ".0" in ein float umgewandelt werden. Das Ergebnis ist dann vom allgemeineren Typ float. Ab Python 2.?? gibt es den zusätzlichen Operator //, der diese Umwandlung selbstständig vornimmt, wenn sie benötigt wird.
Warum rechnet man dann nicht alles in float? Der Grund für die Benutzung von int ist die höhere Geschwindigkeit in der Verarbeitung und (paradoxerweise) die bessere Genauigkeit - ganze Zahlen haben keine Rundungsfehler. Bei sehr großen Zahlen muss man die Geschwindigkeit gegen die Genauigkeit abwägen - die Verarbeitung von Fließkommazahlen ist im Prozessor etwas schneller als die von long integers. Dass das ganze aber eine theoretische Diskussion für weit fortgeschrittene Anwendungen ist, zeigen zwei Beispiele:
- beim Aufsummieren von 100 Millionen float-Einsen ist noch kein Rundungsfehler sichtbar.
- bei einem 64bit-Prozessor wird bis zum Wert 9223372036854775807 mit int gerechnet - danach kommt erst long
Hier wird auch ein interessanter Punkt deutlich: Python passt sich an die Plattform an, auf der es läuft. Das heißt, dass die Datentypen so breit sind, wie es auf dem Prozessor üblich ist. In der folgenden Tabelle stehen die Wertebereiche der Datentypen auf verschiedenen Plattformen:
| Prozessor / Typ | int | long | float | complex |
|---|---|---|---|---|
| 16bit | -32768 bis 32767 | beliebig | ||
| 32bit | -2147483648 bis 2147483647 | beliebig | -1.797693e308 bis -0.248e-323 und 0.25e-323 bis 1.79765e308 | |
| 64bit | -9223372036854775808 bis 9223372036854775807 | beliebig | wie 32bit | |
| 128bit | -170141183460469231731687303715884105728 bis 170141183460469231731687303715884105727 |
beliebig |