543 Stimmen

Liste vs. Tupel, wann ist welches zu verwenden?

Wann sollte man in Python Listen und wann Tupel verwenden?

Manchmal hat man keine andere Wahl, zum Beispiel wenn man

"hello %s you are %s years old" % x

dann muss x ein Tupel sein.

Aber wenn ich derjenige bin, der die API entwickelt und die Datentypen auswählt, wie lauten dann die Richtlinien?

11voto

Rafał Dowgird Punkte 40450

Wenn ich aber derjenige bin, der die API entwickelt und die Datentypen auswählt, wie lauten dann die Richtlinien?

Bei Eingabeparametern ist es am besten, die allgemeinste Schnittstelle zu akzeptieren, die das tut, was Sie brauchen. Es ist selten nur ein Tupel oder eine Liste - häufiger ist es eine Sequenz, ein Sliceable oder sogar ein Iterable. Pythons Duck-Typisierung macht das normalerweise umsonst, es sei denn, Sie prüfen explizit die Eingabetypen. Tun Sie das nicht, es sei denn, es ist absolut unvermeidlich.

Für die von Ihnen erzeugten Daten (Ausgabeparameter) geben Sie einfach das zurück, was für Sie am bequemsten ist, z. B. den Datentyp, den Sie behalten, oder das, was Ihre Hilfsfunktion zurückgibt.

Eine Sache, die zu beachten ist, ist die Vermeidung der Rückgabe einer Liste (oder einer anderen veränderlichen Größe), die Teil Ihres Zustands ist, z.B.

class ThingsKeeper
    def __init__(self):
        self.__things = []

    def things(self):
        return self.__things  #outside objects can now modify your state

    def safer(self):
        return self.__things[:]  #it's copy-on-write, shouldn't hurt performance

4voto

Doug F Punkte 350

Ein kleiner, aber bemerkenswerter Vorteil einer Liste gegenüber einem Tupel ist, dass Listen tendenziell etwas portabler sind. Es ist weniger wahrscheinlich, dass Standardwerkzeuge Tupel unterstützen. JSON zum Beispiel hat keinen Tupel-Typ. YAML hat einen, aber seine Syntax ist hässlich im Vergleich zu seiner Listensyntax, die sehr schön ist.

In diesen Fällen möchten Sie vielleicht intern ein Tupel verwenden und dann im Rahmen eines Exportvorgangs in eine Liste konvertieren. Alternativ können Sie aus Gründen der Konsistenz auch überall Listen verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X