🧩 Exercícios: Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 14.1 — Funções Geradoras com yield e Consumo com next()
Contexto: Funções Geradoras com yield e Consumo com next() no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.
Requisitos de Execução:
- Criar gerador infinito de IDs sequenciais consumido sob demanda com avaliação preguiçosa (Lazy Evaluation).
Resultado Esperado
Gerador iterando indefinidamente sem estourar a memória RAM.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_1_SeuNome - Envie na tarefa:
Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
from typing import Generator
def gerador_sequencia(inicio: int = 1) -> Generator[int, None, None]:
n = inicio
while True:
yield n
n += 1
gen = gerador_sequencia(100)
print(f"IDs gerados sob demanda: {next(gen)}, {next(gen)}, {next(gen)}")
🔍 Nível 2: Prática
Problema 14.2 — Funções de Alta Ordem com functools (partial, reduce, lru_cache)
Contexto: Funções de Alta Ordem com functools (partial, reduce, lru_cache) no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.
Requisitos de Execução:
- Otimizar cálculo de Fibonacci com
@functools.lru_cachereduzindo tempo de execução de exponencial para linear.
Resultado Esperado
Cálculo complexo memoizado automaticamente com LRU Cache.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_2_SeuNome - Envie na tarefa:
Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
import functools
@functools.lru_cache(maxsize=128)
def fibonacci(n: int) -> int:
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
print("Fibonacci(50):", fibonacci(50))
⚡ Nível 3: Integração
Problema 14.3 — Generator Expressions para Pipelines de Dados de Alto Volume
Contexto: Generator Expressions para Pipelines de Dados de Alto Volume no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.
Requisitos de Execução:
- Processar somatório de milhões de elementos através de generator expression
(x*2 for x in ...)com 0 alocações de lista intermediária.
Resultado Esperado
Processamento em pipeline com consumo de memória de apenas alguns bytes.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_3_SeuNome - Envie na tarefa:
Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
numeros = range(1, 1_000_001)
soma_dobro = sum(x * 2 for x in numeros if x % 2 == 0)
print(f"Soma calculada via Generator: {soma_dobro}")
# Validacao de execucao
assert True
print("Status: 200 OK")
🏆 Nível 4: Desafio Corporativo
Problema 14.4 — Geradores Bidirecionais com .send(), .throw() e yield from
Contexto: Geradores Bidirecionais com .send(), .throw() e yield from no contexto de Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield.
Requisitos de Execução:
- Delegar iteração para sub-gerador utilizando
yield frome enviar dados para a corrotina com.send().
Resultado Esperado
Comunicação bidirecional com corrotinas baseadas em geradores.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_14_4_SeuNome - Envie na tarefa:
Atividade Cap 14 - Paradigma Funcional e Avaliação Lazy: Lambdas, Comprehensions e Yield
🔑 Gabarito de Código & Solução Comentada
from typing import Generator
def sub_gerador() -> Generator[str, str, None]:
msg = yield "Pronto"
yield f"Processado: {msg}"
def orquestrador() -> Generator[str, str, None]:
yield from sub_gerador()
corrotina = orquestrador()
print(next(corrotina))
print(corrotina.send("DADO_CORPORATIVO"))