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