General-purpose programming language.
Python is a powerful language that allows for a variety of programming styles, including procedural, object-oriented, and functional programming. Among its many features, Python provides built-in support for iteration, a fundamental concept in computer science. This article will delve into the concepts of Iterators and Generators in Python.
In Python, an iterable is an object capable of returning its elements one at a time. Lists, tuples, dictionaries, and sets are all iterable objects. The for
loop is used to iterate over these objects.
An iterable is an object that implements the __iter__()
method which is expected to return an iterator object. An iterator is an object that keeps state and produces the next value when you call next()
on it.
Here's an example of creating your own iterator:
class MyIterator: def __init__(self, letters): self.letters = letters self.position = 0 def __iter__(self): return self def __next__(self): if self.position >= len(self.letters): raise StopIteration letter = self.letters[self.position] self.position += 1 return letter for letter in MyIterator('abc'): print(letter)
Generators are a simple and powerful tool for creating iterators. They are written like regular functions but use the yield
statement whenever they want to return data. Each time next()
is called, the generator resumes where it left off and yield
s the next value.
Here's an example of a generator that yields numbers:
def my_generator(): yield 1 yield 2 yield 3 for number in my_generator(): print(number)
The main differences between a generator and an iterator are:
yield
statement pauses the function and saves the local state so that it can be resumed right where it left off when next()
is called again.Generators and iterators are used when you need to deal with large data streams or when you need to create an infinite sequence. They are also used when the full list of computation is expensive, and you want to compute the elements on the fly.
By understanding and using iterators and generators, you can write more efficient, clean, and Pythonic code.