osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

itertools cycle() docs question


On Thu, Aug 22, 2019 at 5:56 AM Tobiah <toby at tobiah.org> wrote:
>
> On 8/21/19 11:38 AM, Rob Gaddi wrote:
> > On 8/21/19 11:27 AM, Tobiah wrote:
> >> In the docs for itertools.cycle() there is a bit of equivalent code
> >> given:
> >>
> >> def cycle(iterable): # cycle('ABCD') --> A B C D A B C D A B C D
> >> ... saved = [] for element in iterable: yield element
> >> saved.append(element) while saved: for element in saved: yield
> >> element
> >>
> >>
> >> Is that really how it works?  Why make the copy of the elements?
> >> This seems to be equivalent:
> >>
> >>
> >> def cycle(iterable): while iterable: for thing in iterable: yield
> >> thing
> >
> > You assume that the initial iterable is reusable.  If its not, the
> > only way you can go back to the beginning is to have kept track of it
> > yourself.
> >
>
> I see.  What is an example of an iterable that is not reusable?

Just call iter() on pretty much any iterable, and you'll get back
something that's not reusable.

ChrisA