it' important to see how the range object differs from the built-ins described in this section--it supports len and indexingit is not its own iterator (you make one with iter when iterating manually)and it supports multiple iterators over its result that remember their positions independentlyr range( range allows multiple iterators next(rtypeerrorrange object is not an iterator iter(rnext( next( iter(rnext( next( two iterators on one range is at different spot than by contrastin zipmapand filter do not support multiple active iterators on the same resultbecause of this the iter call is optional for stepping through such objectsresults--their iter is themselves (in these built-ins return multiple-scan lists so the following does not apply) zip(( )( ) iter(zi iter(znext( ( next( ( next( ( map(abs(- ) iter( ) iter(mprint(next( )next( )next( ) next( stopiteration range( iter( )iter( [next( )next( )next( )[ next( two iterators on one zip ( xi is at same spot as ditto for map (and filter( xsingle scan is exhaustedbut range allows many iterators multiple active scanslike lists when we code our own iterable objects with classes later in the book ()we'll see that multiple iterators are usually supported by returning new objects for the iter calla single iterator generally means an object returns itself in we'll iterations and comprehensions