Generator Expressions in Python
Generator expressions provide a concise way to create generators. They are similar to list comprehensions but use parentheses and generate values one at a time, saving memory.
Why Use Generator Expressions?
- ✔ Memory efficient
- ✔ Faster for large datasets
- ✔ Clean and readable syntax
List Comprehension vs Generator Expression
List comprehension creates the entire list in memory:
numbers = [x * 2 for x in range(5)]
print(numbers)
Generator expression creates values lazily:
numbers = (x * 2 for x in range(5))
print(numbers)
💡 Printing a generator shows its object reference.
Values are produced only when iterated.
Iterating Over a Generator
Use a for loop to retrieve values from a generator.
gen = (x * 2 for x in range(5))
for value in gen:
print(value)
Using Generator with sum()
Generator expressions work perfectly with built-in functions
like sum(), max(), and min().
total = sum(x for x in range(10))
print(total)
Generator with Condition
You can add conditions inside generator expressions.
even_numbers = (x for x in range(20) if x % 2 == 0)
for n in even_numbers:
print(n)
One-Time Use Warning
⚠ Generators can be iterated only once.
After exhaustion, they produce no values.
gen = (x for x in range(3))
print(list(gen))
print(list(gen)) # Empty output
📝 Practice:
Create a generator expression that produces squares of numbers from 1 to 10 and prints only values greater than 20.
Create a generator expression that produces squares of numbers from 1 to 10 and prints only values greater than 20.