Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Introduction to Generators: Yielding Values for Efficient Iteration | Mastering Iterators and Generators in Python
Python Advanced Concepts

book
Introduction to Generators: Yielding Values for Efficient Iteration

Generators simplify lazy evaluation by providing a concise and readable way to create iterators. While an iterator is implemented as a class with the __iter__() and __next__() methods, a generator is implemented as a function that uses the yield keyword to produce values one at a time. Generators maintain their state automatically between calls, making them more intuitive and efficient for many use cases.

A generator is a special type of function that:

  1. Uses the yield keyword instead of return;
  2. Pauses execution and retains its state when yield is called;
  3. Resumes execution from where it left off when the generator is called again.
def example_generator():
yield "First value"
yield "Second value"
yield "Third value"

gen = example_generator()
print(next(gen)) # Output: First value
print(next(gen)) # Output: Second value
print(next(gen)) # Output: Third value
123456789
def example_generator(): yield "First value" yield "Second value" yield "Third value" gen = example_generator() print(next(gen)) # Output: First value print(next(gen)) # Output: Second value print(next(gen)) # Output: Third value
copy
import random

def limited_dice_roller(num_rolls):
for _ in range(num_rolls):
yield random.randint(1, 6)

# Using the limited dice roller
print("Rolling the dice:")
for roll in limited_dice_roller(5):
print(f"Rolled: {roll}")
12345678910
import random def limited_dice_roller(num_rolls): for _ in range(num_rolls): yield random.randint(1, 6) # Using the limited dice roller print("Rolling the dice:") for roll in limited_dice_roller(5): print(f"Rolled: {roll}")
copy

Differences Between Iterator and Generator

Tarea

Swipe to start coding

In the previous task, you implemented an infinite dice roller using a custom iterator class. Now, you will simplify the same functionality by using a generator function. Generators provide a concise and readable way to produce values lazily using the yield keyword.

  1. Define the generator function. Use the yield keyword inside the dice_roller function to produce random dice rolls between 1 and 6. Use the random.randint() function to simulate each roll.
  2. Call the dice_roller() function to create a generator object and assign it to the variable dice_generator.
  3. Use a for loop with enumerate() to iterate over the generator. Stop the iteration after 10 rolls using an if condition and the break statement.

Solución

import random

def dice_roller():
while True:
yield random.randint(1, 6)

# Step 1: Create a generator
dice_generator = dice_roller()

# Step 2: Roll the die using the generator
for i, roll in enumerate(dice_generator):
if i >= 10: # Stop after 10 rolls
break
print(f"Rolled: {roll}")

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 6. Capítulo 4
import random

def dice_roller():
___ ___:
___ random.randint(1, 6)

# Step 1: Create a generator
dice_generator = ___()

# Step 2: Roll the die using the generator
for i, roll in ___(___):
if i >= 10: # Stop after 10 rolls
break
print(f"Rolled: {roll}")
toggle bottom row
some-alt