15.4. Arten von Datentypen#
Der Datentyp einer Variablen gibt an, wie die Bits und Bytes interpretiert werden. Die Bits und Bytes des Speicherbereichs, auf welchen die Variable zeigt, machen den Wert der Variablen aus. Im folgenden definieren und initialisieren wir Variablen mit unterschiedlichen Datentypen:
Ganze Zahl
int
,Fließkommazahl
float
,Zeichenkette
str
,Wahrheitswert
bool
,eine Liste
list
, welche ganze Zahlenint
enthält undein Tupel
tuple
, welche Zeichenkettenstr
enthält.
number = 111
floating_number = 1.3
characters = 'Hello'
boolean = True
mylist = [1,2,3,4]
mytuple = ('A', 'B', 'C')
Beim Datentyp list
und tuple
fällt auf, dass diese Werte eines anderen Datentyps enthalten, hier int
und str
.
Solche Datentypen nennen wir zusammengesetzt Datentypen) wohingegen wir Datentypen, welche wir nicht zerlegen können als atomare Datentypen bezeichnen.
Diese atomaren Datentypen können zudem auch atomare Datentypen sein.
Zudem gibt es Datentypen, welche von der jeweiligen Programmiersprache definiert sind und solche die Sie selbst definieren. Erstere nennen wir built-in Datentypen und letztere werden durch Klassen realisiert. Wir werden auf Klassen erst am Ende des Kurses eingehen.
Zusammenfassend gibt es fünf Arten von Datentypen:
Primitive Datentypen,
atomare Datentypen
zusammengesetzte Datentypen,
built-in Datentypen und
eigens definierte Datentypen.
Dabei ist ein Datentyp entweder atomar oder zusammengesetzt und zugleich entweder built-in oder eigens definiert.
Primitive Datentypen sind spezielle atomare Datentypen.
Oftmals sind built-in Datentypen zugleich primitive Datentypen (siehe z.B. Java
, C/C++
).
Eigens definierte Datentypen können niemals primitiv sein.
15.4.1. Primitive Datentypen#
Primitive Datentypen
Primitive Datentypen sind jene Datentypen aus denen alle anderen Datentypen einer Sprache hervorgehen. Sie sind nicht weiter reduzierbar.
Unsere Definitionen von atomaren und primitiven Datentypen ähneln sich sehr.
Worin besteht der Unterschied zwischen einem primitiven und einem atomaren Datentyp?
Nehmen wir zum Beispiel den Python
Datentyp int
.
Der Wert vom Typ int
besteht nicht nur ais dem reinen Wert der ganzen Zahl sondern enthält zusätzlich noch einen Zähler, welcher angibt wie viele Variablen auf den Wert verweisen.
Das heißt wir können int
weiter in den Zähler und den eigentlichen Wert zerlegen.
Allerdings macht es keinen Sinn diese beiden Teile zu zersplittern und separat weiter zu verarbeiten – sie gehören zusammen, da sie nur gemeinsam verarbeitbar sind!
Zeichenketten sind weder primitiv noch atomar, denn eine Zeichenkette lässt sich in ihre einzelnen Zeichen zersplittern und die Weiterverarbeitung der einzelner Zeichen macht durchaus Sinn.
Übertragen wir das auf die ‚echte‘ Welt, so könnte man bei einem Brief von einem Wert eines zusammengesetzten Datentyps sprechen.
Dieser enthält einen Briefkopf, ein Datum einen Absender, Empfänger und den Text.
Das Datum ist wiederum ein zusammengesetzten Datentyp bestehend aus Tag, Monat und Jahr.
Der Tag ist schließlich ein primitiver oder (in Python
) ein atomarer Datentyp (eine Zahl zwischen 0 und 31).
(Der Datentyp Zeichenkette)
Ist set
, d.h. eine Menge, ein atomarer oder zusammengesetzter Datentyp?
Begründen Sie Ihre Antwort.
Solution to Exercise 15.2 (Der Datentyp Zeichenkette)
set
ist ein zusammengesetzter Datentyp dessen Wert eine variable Anzahl an Werten verschiedener Datentypen enthalten kann.
15.4.2. Built-in Datentypen#
Built-in Datentypen sind jene Datentypen, welche die Programmiersprache (ohne weitere Bibliotheken) mitliefert.
Zur Vollständigkeit listen wir hier alle built-in Datentypen von Python
auf.
Einige davon werden Sie jedoch in diesem Kurs nicht verwenden.
Die wichtigsten built-in Datentypen sind hervorgehobenen:
Das Nichts
None
Zahlen (Numbers)
Ganze Zahlen
int
Fließkommazahl (rationale Zahlen)
float
Komplexe Zahlen
complex
Sequenzen (Sequences)
Unveränderlich
Zeichenketten
str
Tupels
tuple
Bytes
bytes
Veränderlich
Listen
list
Byte Arrays
bytearray
Mengen (Set types)
(normale) Mengen
set
(gefrorene Mengen)
frozenset
Abbildungen (Mappings)
Wörterbuch
dict
Aufrufbare Typen (Callable)
Funktionen
Methoden
Klassen
Module
Diese Datentypen stehen Ihnen zur Verfügung sobald Sie Python
auf Ihrem System oder Ihrer Umgebung installiert haben.
Anders als in vielen anderen Sprachen müssen Sie den (built-in) Datentyp einer Variablen in Python
nicht explizit angeben.
Python
schließt von der Schreibweise des Wertes automatisch auf den richtigen Datentyp.
Eine Folge von Ziffern mit einem optional vorangestellten Minuszeichen werden als ganze Zahl int
interpretiert.
Befindet sich in der Folge ein Punkt .
so wird der Wert als Fließkommazahl interpretiert.
Sie können den Datentyp einer Variablen x
oder eines Wertes mit type(x)
abfragen:
type(-3123)
int
type(1.313)
float
name = 'Anna'
type(name)
str
mylist = [1, 2, 3, 4, 'A']
print(f'List Type: {type(mylist)}')
print(f'Element 0 Type: {type(mylist[0])}')
print(f'Element 4 Type: {type(mylist[4])}')
List Type: <class 'list'>
Element 0 Type: <class 'int'>
Element 4 Type: <class 'str'>
15.4.3. Zusammengesetzte Datentypen#
Zusammengesetzte Datentypen definieren wir durch andere Datentypen, welche bereits definiert wurden. Die Basis der zusammengesetzten Datentypen sind deshalb entweder built-in Datentypen der Sprache oder eigens definierte zusammengesetzte Datentypen.
Angenommen Sie wollen den Datentyp Person
definieren welcher sich dadurch auszeichnet, dass er sich aus zwei Zeichenketten str
nämlich dem Vor- und Nachnamen zusammensetzt.
Durch Klassen können Sie einen solchen Datentyp definieren.
Wie wir dies machen, werden wir auf einen späteren Zeitpunkt verschieben.
Listen list
, Tupel tuple
, Mengen set
und Wörterbücher dict
sind zusammengesetzter built-in Datentypen und zugleich enthalten die Werte (Objekte) dieser Datentypen eine
variable Anzahl an Elementen unterschiedlicher Datentypen.
Eine gute Analogie zu diesen sog, Sammlung / Kollektion (engl. Collections) sind physikalische Ordner, Schließfächer, Listen auf Papier geschrieben, Rücksäcke, Körbe, Tüten und andere physikalischen Objekte die wir im Alltag verwenden um andere physikalische Objekte zu ordnen, strukturieren oder schlicht zu halten.
Auch der Arbeitsspeicher ist in diesem Sinne eine sowohl physikalische wie auch virtuelle Kollektion an Bits.
Sammlung (Collection)
Als Sammlung bezeichnen wir alle Datentypen (Tupel, Dictionary, Listen, Mengen usw.), die eine variable Anzahl an anderen Elementen (normalerweise mehrere) beinhalten.
Mit variabler Anzahl ist gemeint, dass es Sammlung gibt, welche 5 Elemente enthalten und Sammlung gibt die 1000 Elementen enthalten. Es kann dennoch sein, dass eine Sammlung die 10 Elemente enthält nicht verändert werden kann, d.h. sie wird auf immer dieser 10 Elemente enthalten.
mylist = [1, 2, 'A', 3, 1.23, [1, 2, 3]]
mylist
[1, 2, 'A', 3, 1.23, [1, 2, 3]]
mytuple = (mylist, 'D')
mytuple
([1, 2, 'A', 3, 1.23, [1, 2, 3]], 'D')
mydict = {'firstname' : 'Paulina', 'lastname' : 'Schmidt', 'age' : 23 }
mydict
{'firstname': 'Paulina', 'lastname': 'Schmidt', 'age': 23}
month = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
month
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
Eine Zeichenkette str
ist ebenfalls eine Kollektion, jedoch sind deren Elemente alle vom gleichen Typ – dem Zeichen.