Być może padłem ofiarą dezinformacji w Internecie, ale wydaje mi się, że jest to bardziej prawdopodobne, że coś źle zrozumiałem. Na podstawie tego, czego się nauczyłem do tej pory, range() jest generatorem, a generatory mogą być używane jako iteratory. Jednak ten kod:Jeśli range() jest generatorem w Pythonie 3.3, dlaczego nie mogę wywołać next() w zakresie?
myrange = range(10)
print(next(myrange))
daje mi ten błąd:
TypeError: 'range' object is not an iterator
Co ja tu brakuje? Spodziewałem się, że wydrukuję 0 i przejdę do następnej wartości w myrange
. Jestem nowy w Pythonie, więc proszę przyjąć moje przeprosiny za raczej podstawowe pytanie, ale nigdzie indziej nie znalazłem dobrego wyjaśnienia.
Zobacz http://stackoverflow.com/q/13054057/395760 dla rozróżnienia iteratory i rzeczy, które można iterować w 'for' pętli. – delnan
Czy to słuszne, aby powiedzieć, że generatory są iterable, ale nie iteratory? – Jeff
@Jeff Iterables to obiekty, których 'iter' może być użyty do uzyskania iteratora. Iteratory są obiektami, które mogą być iterowane przy użyciu 'next'. Generatory to kategoria iteratorów (funkcje generatora i wyrażeń generatora). Przynajmniej tak myślę ... –