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 |