Python-Programmierung: Zahlen
Aus Wikibooks
In Python 2.X gab es vier Zahltypen in Python:
- Ganze Zahlen (
int) - Beliebig lange ganze Zahlen (
long) - Fließkommazahlen (
float) - Komplexe Zahlen (
complex).
Mit Python 3 wurden der Typ int durch den Typen long ersetzt, der dafür in int umbenannt wurde.
Inhaltsverzeichnis |
[Bearbeiten] Zahlentypen
Alles in Python sind Objekte, so auch Zahlen, wovon man sich leicht selbst überzeugen kann:
>>> print type(42) <type 'int'>
Bis einschließlich Version 2.6 kannte Python vier verschiedene Zahlentypen:
int- Ganze Zahlen kodiert als vorzeichenbehaftete Zweierkomplementzahl von mindestens 32-Bit mit einem minimalen Wertebereich von -2147483648 bis 2147483647. Der Typintist in CPython als C-Typlongimplementiert.long- Ganze Zahlen von (fast) unbegrenzter Länge. Die Länge wird nur durch den zur Verfügung stehenden Speicherplatz beschränkt.float- Fließpuntkzahlen, in C-Python als Cdouble>implementiert.complex- Komplexe Zahlen, die ebenfalls alsdoubleWerte in C-Python implementiert sind.
Bis auf den Python Typ long hängen alle Zahlenwerte in Python von der jeweiligen Implementierung und verwendeten Hardware ab. Ein int kann auf einem 64-Bit Betriebssystem durchaus als 64-Bit Zahl implementiert sein.
Mit Python 3 fiel der Typ int weg und durch den Typen long ersetzt.
[Bearbeiten] Ganze Zahlen (int)
Ganze Zahlen werden im Dezimalsystem als einfache Ziffernfolge geschrieben, wobei nach Bedarf ein Vorzeichen vorangestellt werden kann, z.B. 123, -4711. Von führenden Nullen ist dringend abzuraten, wie das folgende Beispiel zeigt:
>>> 0815 File "<stdin>", line 1 0815 ^ SyntaxError: invalid token
Wenn eine Zahl mit einer führenden Null angegeben ist, wird die Zahl im Oktalsystem ausgewertet, also zur Basis 8. Zahlen, die mit 0x beginnen, werden im Hexadezimalsystem ausgewertet, also zur Basis 16.
>>> 010 # oktal 8 >>> -0100 # oktal -64 >>> -0x100 # hexadezimal -256
[Bearbeiten] Beliebig lange ganze Zahlen (long)
Der Zahlentyp int kann keine beliebig großen Zahlen darstellen. Dies ist Aufgabe des Typs long. Er unterscheidet sich in der Schreibweise durch Hinzufügen des Buchstaben L (in Groß- oder Kleinschreibung) nach der Ziffernfolge. long-Werte können wie jede ganze Zahl im Oktal- oder Hexadezimalsystem geschrieben werden. Wenn das Ergebnis einer ganzzahligen Berechnung außerhalb des Wertebereichs von int liegt, wird automatisch long als Ergebnistyp benutzt. Die umgekehrte Umwandlung (von long nach int) erfolgt jedoch nicht automatisch.
>>> 1111111111111111111111 # automatische Umwandlung 1111111111111111111111L >>> 999 ** 99 # 999 hoch 99 ist eine etwas größere Zahl 90569784495866770974195656280275310090138980613960953881501965823101750409706475240 38461398929683905540248523961720824412136973299943953409012824494268482161468659359 61454742677324005498146550510264840271813301125214581059267630055862747172378231729 576039278689152963667155086263379780844149098999L >>> 1L # Eins als long, keine automatische Umwandlung zu int 1L >>> 0x100L # hexadezimal 256L >>> -010L # oktal -8L
Die Unterscheidung zwischen int und long kann sehr lästig werden und zu subtilen Fehlern führen, da der Wertebereich von int plattform- und implementationsabhängig ist. In der Pythonreferenz wird nur ein Mindestwertbereich 32-Bit-Zweierkomplementzahlen verlangt. Implementierungen, z.B. auf 64-Bit-Systemen, können sich durchaus dafür entscheiden, den Wertebereich auszudehnen.
Um diese Unsicherheiten und Fehlerquelle zu beseitigen, wurde mit Python 3 der Typ long kurzerhand in int umbenannt und der alte int Typ abgeschafft. Damit entfallen alle Kennzeichnungen, wie das angefügte L ebenso, wie die Umwandlungsfunktion long().
[Bearbeiten] Fließkommazahlen (float)
Fließkommazahlen werden mit einem Dezimalpunkt notiert (englische Schreibweise), dem Nachkommastellen folgen können (aber nicht müssen). Fließkommazahlen werden grundsätzlich im Dezimalsystem geschrieben.
>>> 10.0 / 3.0 # Division mit Fließkomma 3.3333333333333335 >>> 10. / 3. # Die Null nach dem Dezimalpunkt kann weggelassen werden 3.3333333333333335 >>> 10,0 / 3,0 # Überraschung! Dies ist keine Division mit Fließkomma, sondern ein Tupel (s.u.) (10, 0, 0)
[Bearbeiten] Komplexe Zahlen (complex)
Komplexe Zahlen werden außerhalb wissenschaftlicher Anwendungen selten verwendet. Sie werden durch das Anhängsel j (in Groß- oder Kleinschreibung) an den imaginären Teil gekennzeichnet.
>>> 1+2j (1+2j) >>> (1+2j).real 1.0 >>> (1+2j).imag 2.0 >>> (1+2j)*(1+2j) (-3+4j)
Der Typ complex zeigt noch einen anderen Aspekt, der für die gesamte Pythonprogrammierung von entscheidender Bedeutung ist: everythin is an object - Alles sind Objekte, so auch der Typ complex. real und imag sind read-only Attribute dieses Objekts.
[Bearbeiten] Zusammenfassung
Alle Zahlentypen im Schnelldurchlauf:
>>> type(1) <type 'int'> >>> type(1L) <type 'long'> >>> type(1.0) <type 'float'> >>> type(1+1j) <type 'complex'>