Python hat mit Listen, Sets, Tupel und Dictionaries eine Reihe nützlicher Datenstrukturen direkt mit dabei.
Aber wusstest du, dass du auch noch Hilfe dabei kommst, die Typen so effizient wie möglich zu nutzen?
In dieser kleinen Serie möchte ich dir zeigen, welche das sind!
Hier wird es um Tupel gehen und wie schön man mit ihnen arbeiten kann.
Super hilfreich und doch oft übersehen und gemieden.
Das wird sich hoffentlich in Zukunft ändern!
Mit dem collections Modul bekommst du mehrere Klassen, die dir dabei helfen sollen, die verschienen Typen in Python so effizient wie möglich zu nutzen.
Als Beispiel dient heute eine ToDo Liste.
Aufgaben können zur Liste hinzugefügt oder auch wieder entfernt werden.
Tupel sind unübersichtlich?
Kurz zur Erinnerung:
Tupel sind geordnete, unveränderliche Sequenzen.
Daher eignen sie sich super, um die Zeilen einer Tabelle darzustellen.
Zum Beispiel in SQL Datenbanken, CSV- oder Excel-Dateien.
Zuerst erzeugst du mal ein einfaches Tupel:
("Geschirrspüler ausräumen", "Küche", "Wichtig")
Das besteht aus drei Elementen: Element 0, Element 1, Element 2.
Namen wären schön…
Aber eigentlich hilft das nicht weiter. Du willst ja eher wissen, was das für Elemente sind.
Hilfreich wäre also:
Element 0 = Kurzbeschreibung
Element 1 = Kategorie
Element 2 = Priorität
Hier kommen namedtuples ins Spiel.
Mit namedtuples kannst du jedem Element in einem Tuple einen expliziten Namen zuordnen.
Damit verlierst du nicht mehr den Überblick und weißt, in welcher „Spalte“ welche Daten stecken.
Und so kannst du dein Tuple ganz einfach auf ein namedtuple umschreiben:
from collections import namedtuple
ToDos = namedtuple('ToDos', ['Kurzbeschreibung', 'Kategorie', 'Priorität'])
Du nutzt die Funktion namedtuple(), um eine Klasse mit der entsprechenden Spaltenbeschreibung zu erzeugen.
Du legst also die Spaltennamen deiner Tabelle fest.
Hier wird der „Variablenname“ (sozusagen) auch großgeschrieben. Du erzeugst hier ja eine Klasse und keine Instanz.
NamedTuple: So erzeugst du ein Tupel mit Namen!
Die Funktion namedtuple() nimmt zwei Parameter entgegen:
Zuerst den Namen der Tabelle selbst → ToDos
Und anschließend die Spaltennamen → Kurzbeschreibung, Kategorie, Priorität
Jetzt kannst du die neu erzeugte Klasse benutzen, um deinen Eintrag zu erzeugen.
In dem Fall wird die Variable auch wieder kleingeschrieben.
Jetzt erzeugst du ja eine Instanz der Klasse ToDos, die du soeben generiert hast.
geschirr = ToDos('Geschirrspüler ausräumen', 'Küche', 'Wichtig')
Datenzugriff? Super einfach!
Wenn du dir die Instanz jetzt einmal ausgeben lässt, siehst du schön geordnet deine Werte da drin:
ToDos(Kurzbeschreibung='Geschirrspüler ausräumen', Kategorie='Küche', Priorität='Wichtig')
Das gibt dir jetzt auch neue Möglichkeiten, auf deine Daten zuzugreifen!
Erstmal natürlich so, wie du es von einer Klasse erwarten würdest → Einfach über das Attribut:
geschirr.Kategorie
Aber da es sich ja weiterhin eigentlich um ein Tupel handelt, kannst du auch weiterhin über den Index darauf zugreifen, wie du es von einem Tupel gewohnt bist!
geschirr[1]
Zusammenfassung
Tupel sind auf den ersten Blick etwas gewöhnungsbedürftig.
Aber einmal genauer hingesehen sind sie ein sehr hilfreicher Datentyp!
Durch namedtuple() im collections Modul ist es leichter den Überblick zu behalten, wenn die Tupel mal größer werden.
Es macht den ganzen Code einfach deutlich lesbarer.
Trotzdem gehen die Vorteile von Tupel, dass sie geordnet und unveränderlich sind – nicht verloren!
Probier es aus und sag mir deine Meinung zu namedtuple()!
Ingo Janssen ist ein Softwareentwickler mit über 10 Jahren Erfahrung in der Leitung seines eigenen Unternehmens.
Er studierte Wirtschaftsinformatik an der TH Deggendorf und hat Softwareentwicklung an der FOM Hochschule in München unterrichtet.
Ingo hat mit einer Vielzahl von Unternehmen zusammengearbeitet, von kleinen und mittelständischen Unternehmen bis hin zu MDAX- und DAX-gelisteten Unternehmen.
Ingo ist leidenschaftlich daran interessiert, sein Wissen und seine Expertise mit anderen zu teilen. Aus diesem Grund betreibt er einen YouTube-Kanal mit Programmier-Tutorials und eine Discord-Community, in der Entwickler miteinander in Kontakt treten und voneinander lernen können.
Sie können Ingo auch auf LinkedIn, Xing und Gulp finden, wo er Updates über seine Arbeit teilt und Einblicke in die Tech-Branche gibt.
YouTube | Discord | LinkedIn | Xing | Gulp Profile