An easier way to create an iterator in Python (easier than implementing __next__ and __iter__) is to use the yield keyword to create a generator function.
Although yield may at first seem counter-intuitive, it really behaves a lot like the return keyword. The difference is, you can iterate over the yielded values.
""" Decide if a number is prime """ def is_prime(value): for i in range(2, value // 2 + 1): if value % i == 0: return False # It wasn't divisible by anything. # Must be prime. return True """ Yield prime numbers up to max """ def primes(max): for i in range(3, max): if is_prime(i): yield i def main(): for i in primes(50): print(i, end=" ") print() main()
3 5 7 11 13 17 19 23 29 31 37 41 43 47
In this code we first define a function, is_prime, that can tell us whether a single number is prime or not.
Then the primes function iterates over the numbers up to max. If a number is prime, it yields the number. This is known as a generator function.
You can then iterate over the yielded numbers.