from itertools import chain
class TruthValueAwareIterable(object):
def __init__(self, iterable):
self._iterator = iter(iterable)
try:
self._head = [self._iterator.next()]
self._has_value = True
except StopIteration:
self._head = []
self._has_value = False
def __nonzero__(self):
return self._has_value
def __iter__(self):
return chain(self._head, self._iterator)
if __name__ == "__main__":
def integer_generator():
yield 1
yield 2
yield 3
assert not TruthValueAwareIterable(iter([]))
assert TruthValueAwareIterable(integer_generator())
assert list(TruthValueAwareIterable([])) == []
assert list(TruthValueAwareIterable(integer_generator())) == [1, 2, 3]