# here is a simple generator
# a 'yield' returns an expression which then gets invoked in for loop, a num by itself is an expression
def gen1():
    yield 1
    yield 2
    yield 3  # at this point python's list implemention will raise StopIteration since were at last yield

a = [i for i in gen1()]
print(a)


# following example depicts how Comprehensions are syntactically almost the same except the use of () instead of []

gen2 = ("{0} is even".format(i) for i in range(0, 10) if i % 2 == 0)
print(gen2.__next__())  # get a value
print(list(gen2))  # loop till the end
#print(gen2.__next__())  # this would error, generator can only be looped once

# output
#
# 0 is even
# ['2 is even', '4 is even', '6 is even', '8 is even']



# here is a Generator version of string reversal from interator.py

def reverseString2(data):
    for index in range(len(data) - 1, -1, -1):
        yield data[index]

for c in reverseString2('barfoo'):
    print(c)