Basisdatentypen in Python

0 | 10863 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Basisdatentypen in Python" mit Ihrem Wissen!

Anzeige Hier werben

Hier möchten wir näher beleuchten, welche Datentypen es gibt und wie sie verwendet werden können. Bislang wurden nur einfache Datentypen erwähnt, die beispielsweise eine Zahl oder einen Wahrheitswert aufnehmen können. Darüber hinaus existieren auch sehr komplexe Datentypen, die eine Liste oder Zuordnung verschiedenster Daten speichern und Operationen anbieten, um diese komfortabel zu verarbeiten.

Python definiert dabei eine Reihe von sogenannten Basisdatentypen. Das sind »eingebaute« Typen, die dem Programmierer zu jeder Zeit zur Verfügung stehen. Dabei wird allgemein zwischen numerischen Datentypen, sequenziellen Datentypen, assoziativen Datentypen und Mengen unterschieden.

Das Nichts – NoneType

Beginnen wir mit dem einfachsten Datentyp überhaupt: dem Nichts. Der dazu gehörige Basisdatentyp wird NoneType genannt. Es drängt sich natürlich die Frage auf, wieso es eines Datentyps bedarf, der einzig und allein dazu da ist, »nichts« zu repräsentieren. Nun, es ist eigentlich nur konsequent. Stellen Sie sich einmal folgende Situation vor: Sie implementieren ein Verfahren, bei dem jede reelle Zahl ein mögliches Ergebnis ist.

Allerdings kann es in einigen Fällen vorkommen, dass die Berechnung nicht durchführbar ist. Welcher Wert soll als
Ergebnis zurückgegeben werden? Richtig: »Nichts«. Auch dass das »Nichts« in Python ein eigener Datentyp ist, hat durchaus seine Berechtigung, denn dadurch kann man Variablen explizit auf den Wert »Nichts« testen.

Kommen wir zur konkreten Verwendung des Datentyps: Es gibt nur eine einzige Instanz des »Nichts« namens None. Dies ist eine Konstante, die Sie jederzeit im Quelltext verwenden können:

 
Python
1
2
3
4
>>> ref = None
>>> ref
>>> print ref
None

Im Beispiel wurde eine Referenz namens ref auf None angelegt. Dass None tatsächlich dem »Nichts« entspricht, merken wir in der zweiten Zeile. Wir versuchen, ref vom Interpreter ausgeben zu lassen, und erhalten tatsächlich kein Ergebnis. Um den Wert dennoch auf dem Bildschirm ausgeben zu können, müssen wir uns des Schlüsselwortes print bedienen. Es wurde bereits gesagt, dass None die einzige Instanz des »Nichts« ist. Diese
Besonderheit können wir uns zunutze machen, um sehr effizient zu überprüfen, ob eine Referenz auf None verweist oder nicht:

 
Python
1
2
if ref is None:
    print "ref ist None"

Mit dem Schlüsselwort is wird überprüft, ob die von ref referenzierte Instanz mit None identisch ist. Diese Art, einen Wert auf None zu testen, kann vom Interpreter schneller ausgeführt werden, als der wertbezogene Vergleich mit dem Operator ==, der selbstverständlich auch möglich ist. Beachten Sie, dass diese beiden Operationen nur in diesem Fall und auch hier nur vordergründig äquivalent sind: Mit == werden zwei Werte und mit is zwei Identitäten auf Gleichheit geprüft.

Numerische Datentypen

Die numerischen Datentypen sind eine Kategorie, zu der fünf Basisdatentypen gehören: int und long zum Speichern von ganzen Zahlen, float für Gleitkommazahlen, complex für komplexe Zahlen und bool für boolesche Werte. Alle numerischen Datentypen sind immutable, also unveränderlich. Beachten Sie, dass dies nicht bedeutet, dass es keine Operatoren gibt, um Zahlen zu verändern, sondern vielmehr, dass nach jeder Veränderung eine neue Instanz des jeweiligen Datentyps erzeugt werden muss. Aus Sicht des Programmierers besteht also zunächst kaum ein Unterschied.

Für alle numerischen Datentypen sind folgende Operatoren definiert:

x + y
Summe von x und y
x – y Differenz von x und y
x * y Produkt von x und y
x / y Quotient von x und y
x % y Rest beim Teilen von x durch y (außer bei complex)
+x Positives Vorzeichen, lässt x unverändert
-x Negatives Vorzeichen – Vorzeichenwechsel bei x
x ** y x hoch y
x // y Abgerundeter Quotient von x und y (außer bei complex)

Hinweis

Sollten Sie bereits eine C-ähnliche Programmiersprache beherrschen, wundern Sie sich zu Recht, denn in Python existiert kein Operator für Inkrementierungen (x++) oder Dekrementierungen (x--).

Neben diesen grundlegenden Operatoren existiert in Python eine Reihe zusätzlicher Operatoren. Oftmals möchte man beispielsweise die Summe von x und y berechnen und das Ergebnis in x speichern, x also um y erhöhen. Dazu ist mit den obigen Operatoren folgende Anweisung nötig:

x = x + y

Für solche Fälle gibt es in Python sogenannte erweiterte Zuweisungen (engl. augmented assignments), die als eine Art Abkürzung für die obige Anweisung angesehen werden können.

Ganzzahlen – int, long

Im Raum der ganzen Zahlen gibt es in Python zwei Datentypen: den Typ int für den begrenzten Zahlenraum von –231 bis 231 – 1 (auf 32-Bit-Systemen) und den Typ long für ganze Zahlen, deren Länge theoretisch unbegrenzt ist. Der Datentyp int hat dabei durchaus seine Berechtigung, da er intern als ein Datenwort der zugrunde liegenden Rechnerarchitektur gespeichert wird und somit sehr schnell verarbeitet werden kann. Um mit dem Datentyp long zu arbeiten, muss intern sehr viel mehr Aufwand betrieben werden, weshalb die Verarbeitung
von int im Verhältnis zu long grundsätzlich schneller ist. Falls das Ergebnis einer Operation nicht mehr durch den Datentyp int abgebildet werden kann, erzeugt Python automatisch eine Instanz vom Typ long. Vor dem Programmierer bleibt das in den meisten Fällen verborgen.

Der bevorzugte Datentyp für ganze Zahlen ist int. Möchte man eine Zahl explizit als long definieren, so kennzeichnet man dies durch ein L oder l am Ende des Literals. Auch wenn beides zulässig ist, empfehlen wir hier, stets ein großes L zu verwenden, da das kleine allzu häufig, und gerade am Ende einer Zahl, mit der 1 (Eins) verwechselt wird:

 
Python
1
2
v_int = 12345
v_long = 12348975128537394593873245L

Zahlensysteme für Ganzzahlen

Ganze Zahlen, egal ob int oder long, können in Python in mehreren Zahlensystemen geschrieben werden.
Zahlen, die, wie im obigen Beispiel, ohne ein spezielles Präfix geschrieben sind, werden im Dezimalsystem interpretiert. Zu beachten ist, dass einer solchen Zahl keine führenden Nullen vorangestellt werden dürfen:

 
Python
1
2
v_dez1 = 1337
v_dez2 = 1337L

Eine führende Null kennzeichnet eine Zahl, die im Oktalsystem geschrieben wurde. Die Verwendung des Oktalsystems ist ein Relikt aus älteren Zeiten und wird heute kaum noch benötigt. Beachten Sie, dass hier nur Ziffern von 0 bis 7 erlaubt sind:

 
Python
1
2
v_okt1 = 02471
v_okt2 = 02471L

Die nächste und weitaus gebräuchlichere Variante ist das Hexadezimalsystem, das durch das Präfix 0x bzw. 0X gekennzeichnet wird. Die Zahl selbst darf aus den Ziffern 0-9 und den Buchstaben A–F bzw. a–f gebildet werden:

 
Python
1
2
v_hex1 = 0x5A3F
v_hex2 = 0X5a3fL

Für alle diese Literale ist die Verwendung eines negativen Vorzeichens möglich:

 
Python
1
2
3
4
5
6
>>> -1234
-1234
>>> -0777
-511
>>> -0xFF
-255

Vielleicht möchten Sie sich nicht auf diese drei Zahlensysteme beschränken, die von Python explizit unterstützt werden, sondern ein exotischeres verwenden. Natürlich gibt es in Python nicht für jedes mögliche Zahlensystem ein eigenes Literal. Stattdessen können Sie sich folgender Schreibweise bedienen:

v_6 = int("54425", 6)

Es handelt sich um eine alternative Methode, eine Instanz des Datentyps int zu erzeugen und mit einem Anfangswert zu versehen. Dazu werden in den Klammern ein String, der den gewünschten Initialwert in dem gewählten Zahlensystem enthält, sowie die Basis dieses Zahlensystems als ganze Zahl geschrieben. Beide Werte müssen durch ein Komma getrennt werden. Im Beispiel wurde das Sechsersystem verwendet. Python unterstützt Zahlensysteme mit einer Basis zwischen 2 und 36. Wenn ein Zahlensystem mehr als zehn verschiedene Ziffern zur Darstellung einer Zahl benötigt, werden zusätzlich zu den Ziffern 0 bis 9 die Buchstaben des englischen Alphabets A bis Z verwendet.

v_6 hat jetzt den Wert 7505 (im Dezimalsystem).

Beachten Sie, dass es sich bei den Zahlensystemen nur um eine alternative Schreibweise des gleichen Wertes handelt. Der Datentyp int springt beispielsweise nicht in eine Art Hexadezimalmodus, sobald er einen solchen Wert enthält. Ein Zahlensystem ist nur bei Wertzuweisungen oder -ausgaben von Bedeutung. Standardmäßig werden alle Zahlen im Dezimalsystem ausgegeben:

 
Python
1
2
3
4
5
6
>>> v1 = 0xFF
>>> v2 = 0777
>>> v1
255
>>> v2
511

Gleitkommazahlen – float

Zu Beginn dieses Teils des Buches sind wir bereits oberflächlich auf Gleitkommazahlen eingegangen, was wir hier ein wenig vertiefen möchten. Zum Speichern einer Gleitkommazahl mit begrenzter Genauigkeit wird der Datentyp float verwendet.

Wie bereits besprochen wurde, sieht eine Gleitkommazahl im einfachsten Fall folgendermaßen aus:

v = 3.141

Python unterstützt außerdem eine Notation, die es ermöglicht, die Exponentialschreibweise zu verwenden:

v = 3.141e-12

Durch ein kleines oder großes e wird die Mantisse (3.141) vom Exponenten (-12) getrennt. Übertragen in die mathematische Schreibweise, entspricht 3.141e-12 also 3,141 x 10–12. Beachten Sie, dass sowohl die Mantisse als auch der Exponent im Dezimalsystem anzugeben sind. Andere Zahlensysteme sind nicht vorgesehen, was die gefahrlose Verwendung von führenden Nullen ermöglicht:

v = 03.141e-0012

Boolesche Werte – bool

Eine Instanz des Datentyps bool kann nur zwei verschiedene Werte annehmen:

»Wahr« oder »Falsch« oder, um innerhalb der Python-Syntax zu bleiben, True bzw. False. Deshalb ist es auf den ersten Blick absurd, bool den numerischen Datentypen unterzuordnen. Python sieht hier jedoch True analog zur 1 und False analog zur 0, sodass sich mit booleschen Werten genauso rechnen lässt wie beispielsweise schon mit den ganzen Zahlen. Bei den Namen True und False handelt es sich um Konstanten, die im Quelltext verwendet werden können. Zu beachten ist besonders, dass die Konstanten mit einem Großbuchstaben beginnen:

v1 = True
v2 = False

Komplexe Zahlen – complex

Zusätzlich findet sich ein Datentyp zur Speicherung komplexer Zahlen unter Pythons Basisdatentypen. In anderen Programmiersprachen würden komplexe Zahlen eher eine Randnotiz in der Standardbibliothek darstellen. Auf den Datentyp "complex" gehen wir dabei in einem eigenen Artikel ein, den Sie unter Komplexe Zahlen in Python - der Datentyp "complex"

Buchhinweis

Bild zu Basisdatentypen in Python

Dieser Artikel stammt aus dem Buch "Python – Das umfassende Handbuch" von Peter Kaiser und Johannes Ernesti und wurde uns von Galileo Design zur Verfügung gestellt hat. Das Buch kann über die Webseite des Galileo Verlag bestellt werden.


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 4 Personen an der Seite "Basisdatentypen in Python" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Basisdatentypen in Python" hier bearbeiten.

Mitarbeiter