Xrange против итераторов Python

Меня немного смущает, почему я не могу рассматривать объект xrange() как итератор:

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

Это работает, если xrange() обернут внутри iter(). Это также работает, если я делаю для в цикле над XR. Как переводится цикл for, если xr не является итератором?

РЕДАКТИРОВАТЬ: я видел другой ответ, который был рекомендован, но до сих пор не ясно, почему объект xrange не может быть напрямую повторен. В другом ответе упоминается, что объекты xrange неизменны, и это является преимуществом. Но какова связь между тем, чтобы быть неизменным и не быть непосредственно повторяемым? Даже повторяемый объект кажется мне неизменным, так в чем же состоит преимущество или причина того, что объект диапазона не может быть напрямую повторяем?

1 ответ

Как вы можете видеть по этой ссылке - https://docs.python.org/2/library/functions.html

xrange вернет xrange-object вместо list который повторяется. поэтому вы не можете напрямую звонить дальше по нему.

Другие вопросы по тегам