Generator vs Sequenzobjekt

8

Ich kenne den Unterschied zwischen range und xrange .
Aber ich war überrascht zu sehen, dass xrange nicht generator , sondern sequence object war.

Was ist der Unterschied, wie man ein sequence object erstellt und wenn es über generator verwendet wird?

    
MoiTux 30.06.2014, 22:01
quelle

2 Antworten

11

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):

%Vor%

Mit anderen Worten

  • etwas ist eine Sequenz, wenn es alle in diesem Link definierten Methoden unterstützt.
  • Wenn es ein Generator ist, unterstützt es wahrscheinlich nur eine Methodenpaar ( .next oder .__next__ sind die wichtigsten) 1 .
  • es gibt auch ein Zwischenland, das "iterabel" ist - "iterables" haben eine typisch 2 definierte __iter__ -Methode, die "generator" zurückgibt (etwas mit einem wohldefinierten .next oder .__next__ 3 Methode)
  • nur um vollständig zu sein, sehen Sie oft Leute, die Iteratoren sagen, die Generatoren sehr ähnlich sind (implementieren Sie __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

    
mgilson 30.06.2014, 22:06
quelle
2

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%     
johntellsall 30.06.2014 22:08
quelle

Tags und Links