<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jul 22, 2016 at 8:48 AM, Chris Angelico <span dir="ltr"><<a href="mailto:rosuav@gmail.com" target="_blank">rosuav@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">IMO, no. Some iterators can be restarted by going back to the original<br>
iterable and requesting another iterator, but with no guarantee that<br>
it will result in the exact same sequence (eg dict/set iterators).<br></blockquote><div><br></div><div>Sequences don't give you this *guarantee* either.  A trivial example:</div><div><br></div><div><div>class MyList(list):</div><div>    def __getitem__(self, ndx):</div><div>        # In "real world" this might be meaningful condition and update</div><div>        if random() < .333:</div><div>            if isinstance(ndx, slice):</div><div>                for n in range(ndx.start, ndx.stop, ndx.step or 1):</div><div>                    self[n] += 1</div><div>            else:</div><div>                self[ndx] += 1</div><div>        return super().__getitem__(ndx)</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">What you might be looking at is a protocol for "bookmarking" or<br>
"forking" an iterator. That might be more useful. For example:<br></blockquote><div><br></div><div>How is this different from itertools.tee()?</div><div> </div></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Keeping medicines from the bloodstreams of the sick; food <br>from the bellies of the hungry; books from the hands of the <br>uneducated; technology from the underdeveloped; and putting <br>advocates of freedom in prisons.  Intellectual property is<br>to the 21st century what the slave trade was to the 16th.<br></div>
</div></div>