# Section 4.2: Generators
# Generating the elements of an array
def elements(a):
for i in range(len(a)):
yield a[i]
print("elements [1,2,3]:");
for i in elements([1,2,3]): print(i)
print("elements [1,2]:");
g = elements([1,2]) # returns a generator
print(next(g)) # prints "1"
print(next(g)) # prints "2"
try:
print(next(g)) # raises the StopIteration exception
except StopIteration:
print("No more elements")
def primes():
"""Generator for prime numbers"""
p = [2]; yield 2
m = 3
while True:
i = 0
while i < len(p) and p[i] * p[i] <= m:
if m % p[i] == 0: break
i += 1
else:
p.append(m); yield m
m += 2
print("Some prime numbers:", end=" ")
g = primes()
for i in range(20): print(next(g), end=" ")
print()
def factor(n):
"""Print the prime number factorization of n"""
pr = primes()
while n > 1:
p = next(pr)
while n % p == 0: print(p); n = n // p
print("Factoring 924:")
factor(924)
def generator():
n = 0
while True:
yield n; yield (-n); n += 1
print("Generating some integers:", end=" ")
g = generator()
for i in range(20): print(next(g), end=" ")
print()