Sobes.tech
Middle

What is the difference between an iterator, an iterable object, and a generator in Python?

sobes.tech AI

Answer from AI

An iterable object is any object that can return an iterator. It has the __iter__() method. Examples: lists, tuples, strings.

An iterator is an object that represents a data stream. It returns the next element when the __next__() method is called. If there are no more elements, it raises a StopIteration exception. It has the methods __iter__() (returns itself) and __next__().

A generator is a special type of iterator created using a generator function or generator expression. Generator functions use the yield keyword to produce elements. They preserve their state between calls.

# Example of an iterable object (list)
my_list = [1, 2, 3]

# Example of an iterator obtained from an iterable
my_iterator = iter(my_list)

# Getting the next element using the iterator
print(next(my_iterator))
print(next(my_iterator))

# Example of a generator function
def my_generator_function():
    yield 1
    yield 2
    yield 3

# Creating a generator object
my_generator = my_generator_function()

# Getting the next element from the generator (implicitly uses __next__)
print(next(my_generator))
print(next(my_generator))
Characteristic Iterable object Iterator Generator
Iteration capability Yes Yes Yes
__iter__() method Returns an iterator Returns itself Returns itself
__next__() method No (requires iter() first) Returns the next element Used to get elements (next())
Creation Built-in types, classes with __iter__ Obtained from an iterable object (iter()) Generator function with yield, generator expressions
Memory Stores all elements Stores state and reference to the next element Lazily computes elements, stores state