Intermediate

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?

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.