Ich lerne gerade Python für einen Kurs, und wir haben gerade Tupel als einen der Datentypen behandelt. Ich habe die Wikipedia-Seite dazu gelesen, aber ich konnte nicht herausfinden, wo ein solcher Datentyp in der Praxis nützlich sein könnte. Kann ich ein paar Beispiele haben, vielleicht in Python, wo eine unveränderliche Menge von Zahlen benötigt wird? Worin besteht der Unterschied zu einer Liste?
Antworten
Zu viele Anzeigen?Ein Tupel ist eine Folge von Werten. Die Werte können von beliebigem Typ sein und werden durch ganze Zahlen indiziert, so dass Tupel nicht wie Listen sind. Der wichtigste Unterschied ist, dass Tupel sind unveränderlich.
Ein Tupel ist eine kommagetrennte Liste von Werten:
t = 'p', 'q', 'r', 's', 't'
ist es gute Praxis, Tupel in Klammern zu setzen:
t = ('p', 'q', 'r', 's', 't')
Eine Liste kann in Bezug auf die Funktionalität immer ein Tupel ersetzen (außer anscheinend als Schlüssel in einem Diktat). Allerdings kann ein Tupel die Dinge schneller machen. Das Gleiche gilt zum Beispiel für unveränderliche Strings in Java - wann werden Sie jemals nicht in der Lage sein, Ihre Strings zu ändern? Niemals!
Ich habe gerade eine gute Diskussion darüber gelesen, wie man die Möglichkeiten einschränken kann, um bessere Programme zu erstellen; Warum funktionale Programmierung wichtig ist
Ein Tupel ist nützlich, um mehrere Werte zu speichern. Wie Sie bemerken, ist ein Tupel genau wie eine Liste unveränderlich - d.h. einmal erstellt, können Sie keine Elemente hinzufügen/entfernen/vertauschen.
Ein Vorteil der Unveränderlichkeit ist, dass das Tupel eine feste Größe hat und somit zur Laufzeit bestimmte Optimierungen vorgenommen werden können. Dies ist besonders vorteilhaft, wenn ein Tupel im Zusammenhang mit einem Rückgabewert oder einem Parameter für eine Funktion verwendet wird.
Zusätzlich zu den Stellen, an denen sie syntaktisch erforderlich sind, wie z. B. bei der String-%-Operation und bei mehreren Rückgabewerten, verwende ich Tupel als eine Form von leichtgewichtigen Klassen. Nehmen wir zum Beispiel an, Sie haben ein Objekt, das einen undurchsichtigen Cookie an einen Aufrufer einer Methode weitergibt, der dann an eine andere Methode weitergegeben wird. Ein Tupel ist eine gute Möglichkeit, mehrere Werte in dieses Cookie zu packen, ohne eine separate Klasse für diese Werte definieren zu müssen.
Ich versuche jedoch, bei dieser speziellen Verwendung mit Bedacht vorzugehen. Wenn die Cookies überall im Code verwendet werden, ist es besser, eine Klasse zu erstellen, da dies hilft, ihre Verwendung zu dokumentieren. Wenn sie nur an einer Stelle verwendet werden (z. B. bei einem Paar von Methoden), dann verwende ich vielleicht ein Tupel. Da es sich um Python handelt, können Sie auf jeden Fall mit einem Tupel beginnen und es dann in eine Instanz einer benutzerdefinierten Klasse umwandeln, ohne den Code des Aufrufers ändern zu müssen.