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
который повторяется. поэтому вы не можете напрямую звонить дальше по нему.