An iterable is any object that can return an iterator when you call iter() on it. It must implement the iter() method. for example a list a dictionary is iterable.
an iterator is an object that produces elements one at a time using the next() method. it must implement both iter and next methods. it = iter(my_list) ,print(next(it))
A generator is a special kind of iterator created by a funciton with yield or a generator expression. gen = (x * 2 for x in range(5)), note to differentiate it from the list comprehension list = [x * 2 for x in range(5)]