""" web.utils.iterbetter.py Help on IterBetter in module web.utils object: class IterBetter(builtins.object) | Returns an object that can be used as an iterator | but can also be used via __getitem__ (although it | cannot go backwards -- that is, you cannot request | `iterbetter[0]` after requesting `iterbetter[1]`). | | >>> import itertools | >>> c = iterbetter(itertools.count()) | >>> c[1] | 1 | >>> c[5] | 5 | >>> c[3] | Traceback (most recent call last): | ... | IndexError: already passed 3 | | It is also possible to get the first value of the iterator or None. | | >>> c = iterbetter(iter([3, 4, 5])) | >>> print(c.first()) | 3 | >>> c = iterbetter(iter([])) | >>> print(c.first()) | None | | For boolean test, IterBetter peeps at first value in the iterator without effecting the iteration. | | >>> c = iterbetter(iter(range(5))) | >>> bool(c) | True | >>> list(c) | [0, 1, 2, 3, 4] | >>> c = iterbetter(iter([])) | >>> bool(c) | False | >>> list(c) | [] | | Methods defined here: | | __bool__ = __nonzero__(self) | | __getitem__(self, i) | | __init__(self, iterator) | Initialize self. See help(type(self)) for accurate signature. | | __iter__(self) | | __nonzero__(self) | | first(self, default=None) | Returns the first element of the iterator or None when there are no | elements. | | If the optional argument default is specified, that is returned instead | of None when there are no elements. | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) """ import web import itertools # 1. print("1.") c = web.utils.iterbetter(itertools.count()) print("c:", c) # c: <web.utils.IterBetter object at 0x0000026E4A596EF0> print("c[0]:", c[0]) # c[0]: 0 print("c[1]:", c[1]) # c[1]: 1 print("c[5]:", c[5]) # c[5]: 5 # print("c[3]:", c[3]) # IndexError: already passed 3 # 2. print("2.") c = web.utils.iterbetter(iter([3, 4, 5])) print(c.first()) # 3 c = web.utils.iterbetter(iter([])) print(c.first()) # None # 3. print("3.") c = web.utils.iterbetter(iter(range(5))) print(bool(c)) # True print(list(c)) # [0, 1, 2, 3, 4] c = web.utils.iterbetter(iter([])) print(bool(c)) # False print(list(c)) # []