Grundsätzlich ist eine Liste implementiert die __reversed__
Methode und gibt ein spezialisiertes Objekt, während tuple
für jede Folge auf die Standardimplementierung von reversed
fällt zurück:
>>> list.__reversed__
<method '__reversed__' of 'list' objects>
>>> tuple.__reversed__
AttributeError: type object 'tuple' has no attribute '__reversed__'
Nun, warum Liste nicht auf die Sequenz Zu reversed
Objekt muss im Quellcode für das Listenobjekt selbst gefunden werden - wahrscheinlich ermöglicht es einige Optimierungen durch direkten Zugriff auf einige der internen list
Attribute.
Eigentlich an dem C-Code sucht, gibt es kaum einen Unterschied, und schon gar nichts, das ins Auge fällt -
ich die besondere Liste zu sagen wagen würde __reversed__
Implementierung ist ein Rest von Python2 Tagen, wo reversed
würde eigentlich jede andere Python-Sequenz in eine list
kopieren - so würde es keinen Sinn für andere Sequ Es gibt spezielle Fälle dafür (und wenn sie das allgemeine enumreverse
implementiert haben, war es gerade gut genug für Tupel).
Ich bin mir ziemlich sicher, dass, wenn man einfach die __reversed__
Slot Kommentar heraus listobject.c
würde, Python und seine Listen funktionieren würde, als ob nichts geschehen wäre, reversed
auf den allgemeinen Fall in Verzug.
Es scheint keinen Unterschied bar Leistung zu geben, es sei denn, Sie verwenden eine ältere Version von Python, wo Sie len auf dem listreverseterator aufrufen könnten. http://bugs.python.org/issue3689. –