Der Grund, dass xrange
ein Sequenzobjekt ist, liegt darin, dass es die Sequenzmethoden-Schnittstelle . Zum Beispiel können Sie es indizieren (was Sie mit einem Vanille-Generator nicht tun können):
Mit anderen Worten
.next
oder .__next__
sind die wichtigsten) 1 . __iter__
-Methode, die "generator" zurückgibt (etwas mit einem wohldefinierten .next
oder .__next__
3 Methode) __iter__
, das das Objekt selbst zurückgibt und eine wohldefinierte Methode next
und / oder __next__
hat) . Weitere formale Definitionen finden Sie im Dokumentations-Glossar
1 Generatoren unterstützen auch __iter__
und kehren einfach selbst zurück. Technisch gesehen sind alle Generatoren auch Iterables (und Iteratoren!), aber nicht alle Iteratoren (Iteratoren) sind Generatoren. 2 __len__
+ __getitem__
ist genug, um ein iterables zu erstellen, wie in den Kommentaren erwähnt. 3 __next__
ist der Methodenname für python3.x
A sequence object
ist ein spezieller, von C bereitgestellter Typ. Ein generator
kann vom Benutzercode geschrieben werden.
Das ist eine Sache von Python 2 - in Python 3:
%Vor%Python2:
%Vor%Tags und Links python