OpenQuizz
Une application de gestion des contenus pédagogiques
seekable Class Reference

Public Member Functions

def __init__ (self, iterable, maxlen=None)
 
def __iter__ (self)
 
def __next__ (self)
 
def __bool__ (self)
 
def peek (self, default=_marker)
 
def elements (self)
 
def seek (self, index)
 

Detailed Description

Wrap an iterator to allow for seeking backward and forward. This
progressively caches the items in the source iterable so they can be
re-visited.

Call :meth:`seek` with an index to seek to that position in the source
iterable.

To "reset" an iterator, seek to ``0``:

    >>> from itertools import count
    >>> it = seekable((str(n) for n in count()))
    >>> next(it), next(it), next(it)
    ('0', '1', '2')
    >>> it.seek(0)
    >>> next(it), next(it), next(it)
    ('0', '1', '2')
    >>> next(it)
    '3'

You can also seek forward:

    >>> it = seekable((str(n) for n in range(20)))
    >>> it.seek(10)
    >>> next(it)
    '10'
    >>> it.seek(20)  # Seeking past the end of the source isn't a problem
    >>> list(it)
    []
    >>> it.seek(0)  # Resetting works even after hitting the end
    >>> next(it), next(it), next(it)
    ('0', '1', '2')

Call :meth:`peek` to look ahead one item without advancing the iterator:

    >>> it = seekable('1234')
    >>> it.peek()
    '1'
    >>> list(it)
    ['1', '2', '3', '4']
    >>> it.peek(default='empty')
    'empty'

Before the iterator is at its end, calling :func:`bool` on it will return
``True``. After it will return ``False``:

    >>> it = seekable('5678')
    >>> bool(it)
    True
    >>> list(it)
    ['5', '6', '7', '8']
    >>> bool(it)
    False

You may view the contents of the cache with the :meth:`elements` method.
That returns a :class:`SequenceView`, a view that updates automatically:

    >>> it = seekable((str(n) for n in range(10)))
    >>> next(it), next(it), next(it)
    ('0', '1', '2')
    >>> elements = it.elements()
    >>> elements
    SequenceView(['0', '1', '2'])
    >>> next(it)
    '3'
    >>> elements
    SequenceView(['0', '1', '2', '3'])

By default, the cache grows as the source iterable progresses, so beware of
wrapping very large or infinite iterables. Supply *maxlen* to limit the
size of the cache (this of course limits how far back you can seek).

    >>> from itertools import count
    >>> it = seekable((str(n) for n in count()), maxlen=2)
    >>> next(it), next(it), next(it), next(it)
    ('0', '1', '2', '3')
    >>> list(it.elements())
    ['2', '3']
    >>> it.seek(0)
    >>> next(it), next(it), next(it), next(it)
    ('2', '3', '4', '5')
    >>> next(it)
    '6'

Constructor & Destructor Documentation

◆ __init__()

def __init__ (   self,
  iterable,
  maxlen = None 
)

Member Function Documentation

◆ __bool__()

def __bool__ (   self)

◆ __iter__()

def __iter__ (   self)

◆ __next__()

def __next__ (   self)

◆ elements()

def elements (   self)

◆ peek()

def peek (   self,
  default = _marker 
)

◆ seek()

def seek (   self,
  index 
)

The documentation for this class was generated from the following file: