2017-08-29 1 views
0

Ich bin ein wenig verwirrt durch, warum ich ein xrange() Objekt als Iterator nicht behandeln:xrange vs Iteratoren Python

In [47]: xr = xrange(1,7) 

In [48]: next(xr) 
----------------------------------------------------------------------- 
---- 
TypeError         Traceback (most recent call 
last) 
<ipython-input-48-e71cfa0995ec> in <module>() 
----> 1 next(xr) 

TypeError: xrange object is not an iterator 

Es funktioniert, wenn xrange() innerhalb iter gewickelt ist(). Es funktioniert auch, wenn ich eine for in Schleife über xr mache. Wie wird die for-Schleife übersetzt, wenn xr kein Iterator ist?

EDIT: Ich sah die andere Antwort, die empfohlen wurde, aber es ist immer noch nicht klar, warum das Xrange-Objekt nicht direkt iterierbar ist. Die andere Antwort erwähnt, dass xrange Objekte unveränderlich sind und dies ist ein Vorteil. Aber was ist die Verbindung zwischen unveränderlich und nicht direkt iterierbar? Selbst ein iterierbares Objekt scheint mir unveränderlich zu sein, also was genau ist der Nutzen oder der Grund dafür, dass ein Bereichsobjekt nicht direkt iterierbar ist?

+0

Wenn Sie 'next' auf etwas anrufen können, bedeutet das unbedingt, dass es einen Zustand hat. 'xrange' Objekte haben keinen Status. – SethMMorton

+0

Frage: Wenn ich 'a = xrange (10) mache; drucke 5 in a', was würdest du erwarten, dass das Ergebnis von 'print list (a)' danach ist? – SethMMorton

Antwort

Verwandte Themen