Datentypen können in einen anderen umgewandelt werden. Implizit hast du dies mit den f-Strings bereits getan. Typkonvertierung wird dir vermutlich meistens bei Zahlen und Strings begegnen.
str()
Die str()
Funktion wandelt einen Datentyp in einen String um. Nimm mal folgendes Beispiel:
wert = 3
str = 'Die ' + wert + ' Musketiere'
Wenn du das ausführst, erhältst du folgende Fehlermeldung vom Interpreter
TypeError: can only concatenate str (not "int") to str
Das liegt daran, dass die +
Operation für Strings nur Strings miteinander verbinden kann. Daher müssen wir die Variable wert
in einen String konvertieren.
str = 'Die ' + str(wert) + ' Musketiere'
Mit str()
kannst du auch float
und Klassen, die die __str__()
Methode implementieren, in einen String konvertieren.
int()
Die int()
Funktion arbeitet genau anders herum, sie konvertiert einen String in ein int
, sofern möglich. Dies ist vor allem nützlich bei Benutzereingaben, die zunächst als String vorliegen.
eingabe = input('Dein Alter (Jahre): ')
alter = int(eingabe)
print(f'Du bist {alter} Jahre alt.')
Mittels der input()
Funktion kann der Benutzer sein Alter eingeben. Danach wird mit int()
die Eingabe in einen Integer konvertiert und danach in einen f-String eingesetzt und ausgegeben.
Du solltest eine solche Konvertierung immer innerhalb von try-except
benutzen, um einen TypeError
abzufangen, falls die Eingabe kein Integerwert war.
tuple()
Die Typkonvertierung einer Liste, eines Set oder Strings geschieht mit der tuple()
Funktion.
namen = ["Homer", "Marge", "Bart"]
print(tuple(namen))
print(tuple('Jimbo'))
Du siehst , dass die Namensliste in ein Tupel umgewandelt wurde. Der String wird in seine Zeichen zerlegt und jedes Zeichen bildet dann ein Element des Tupels.
set()
set()
konvertiert eine Liste, ein Tupel oder einen String in eine Set. Die Funktion arbeitet ähnlich wie tuple()
, da bei einem Set die Reihenfolge der Hashwerte jedes Eintrags für die Reihenfolge ausschlaggebend ist.
from namen import namen
print(set(namen))
print(set("Jimbo"))
bool()
Um Werte des booleschen Typs zu erzeugen gibt es natürlich auch eine Funktion. Strings sind genau dann True
, wenn sie mind. ein Zeichen enthalten. Listen, Sets und Tupel sind True
, wenn sie mindestens ein Element enthalten, in Dictionaries muss mind. ein Schlüssel enthalten sein, um True
zu erzeugen.
from namen import namen
### String nach Boolean
print('String nach Boolean')
print(bool('True')) # ist True
print(bool('Test')) # ist True
print(bool('False')) # ist True
print(bool('')) # ist False
### int nach Boolean
print('int nach Boolean')
print(bool(0)) # ist False
print(bool(1)) # ist True
print(bool(2)) # ist True
### List nach Boolean
print('List nach Boolean')
print(bool(namen)) # ist True
print(bool([])) # ist False
Ob deine eigene Klasse von bool()
verarbeitet werden kann, hängt davon ab, ob sie die __bool__()
Methode implementiert.
bytes()
bytes() konvertiert einen String oder eine Liste von ASCII-Werten in einen String. Eine Typkonvertierung von String nach String scheint zunächst nicht viel Sinn zu machen, allerdings musst du für den zu verarbeitenden String das Encoding angeben, um daraus einen UTF-8 String zu machen.
some_chars = [65,66,67,68]
print(bytes('Homer', encoding='utf-8'))
print(bytes(some_chars))
bytearray()
bytearray()
arbeitet ähnlich wie bytes()
, liefert aber ein Array von Zeichen zurück.
some_chars = [65,66,67,68]
print(bytes('Homer', encoding='utf-8'))
print(bytes(some_chars))
Zum Abschluss weise ich nochmal daraufhin, die Konvertierungsfunktionen immer mit einem try-except
zu umklammern, um eine saubere Fehlerbehandlung durchführen zu können. Im nächsten Teil schauen wir uns mal an, wie man mit Dateien arbeitet.