Python ‐ Functional Programming 2 - cunhapaulo/ReferenceCard GitHub Wiki
1. Funções de Alta Ordem (Higher-Order Functions)
Funções que recebem outras funções como argumento ou retornam funções.
Exemplo Avançado:
Vamos criar um sistema de aplicação de impostos, onde diferentes funções de imposto podem ser passadas dinamicamente.
def imposto_simples(valor):
return valor * 0.1
def imposto_progresso(valor):
return valor * 0.2 if valor > 5000 else valor * 0.1
def aplicar_imposto(funcao_imposto, valor):
return funcao_imposto(valor)
# Testando diferentes impostos
valor_compra = 6000
print(aplicar_imposto(imposto_simples, valor_compra)) # Saída: 600.0
print(aplicar_imposto(imposto_progresso, valor_compra)) # Saída: 1200.0
2. Funções Anônimas (Lambda)
Funções curtas e sem nome, úteis para operações rápidas.
Exemplo Avançado:
Vamos criar um ordenador de lista de dicionários, onde ordenamos uma lista de produtos pelo preço.
produtos = [
{"nome": "Celular", "preco": 1500},
{"nome": "Notebook", "preco": 4500},
{"nome": "Tablet", "preco": 2500}
]
# Ordenando pelo preço
produtos_ordenados = sorted(produtos, key=lambda p: p["preco"])
print(produtos_ordenados)
3. Mapeamento de Funções (map)
Aplica uma função a todos os elementos de um iterável.
Exemplo Avançado:
Vamos calcular o desconto para uma lista de produtos.
produtos = [
{"nome": "Celular", "preco": 1500},
{"nome": "Notebook", "preco": 4500},
{"nome": "Tablet", "preco": 2500}
]
desconto = lambda p: {"nome": p["nome"], "preco": p["preco"] * 0.9}
produtos_com_desconto = list(map(desconto, produtos))
print(produtos_com_desconto)
4. Filtragem de Dados (filter)
Filtra elementos de um iterável com base em uma condição.
Exemplo Avançado:
Vamos filtrar os produtos mais caros que R$ 2000.
produtos = [
{"nome": "Celular", "preco": 1500},
{"nome": "Notebook", "preco": 4500},
{"nome": "Tablet", "preco": 2500}
]
produtos_caros = list(filter(lambda p: p["preco"] > 2000, produtos))
print(produtos_caros)
5. Redução de Valores (reduce)
Reduz um iterável a um único valor aplicando uma função cumulativa.
Exemplo Avançado:
Vamos calcular o total de preços dos produtos.
from functools import reduce
produtos = [
{"nome": "Celular", "preco": 1500},
{"nome": "Notebook", "preco": 4500},
{"nome": "Tablet", "preco": 2500}
]
total = reduce(lambda acc, p: acc + p["preco"], produtos, 0)
print(total) # Saída: 8500
6. Compreensão de Listas (List Comprehension)
Forma concisa de criar listas aplicando funções e filtros.
Exemplo Avançado:
Vamos normalizar nomes de produtos (converter para maiúsculas).
produtos = ["celular", "notebook", "tablet"]
produtos_normalizados = [produto.upper() for produto in produtos]
print(produtos_normalizados)
7. Imutabilidade com Tuplas
Manter os dados imutáveis é um princípio importante da programação funcional.
Exemplo Avançado:
Vamos simular um registro de transações bancárias usando tuplas para garantir a imutabilidade.
transacoes = (
{"tipo": "depósito", "valor": 1000},
{"tipo": "saque", "valor": 500},
{"tipo": "depósito", "valor": 2000}
)
# Tentativa de modificar uma transação geraria um erro
# transacoes[0]["valor"] = 2000 # Isso geraria um erro, pois tuplas são imutáveis
8. Funções Recursivas
Funções que chamam a si mesmas, útil para resolver problemas indutivos.
Exemplo Avançado:
Vamos criar uma função recursiva para calcular a sequência de Fibonacci.
def fibonacci(n, memo={}):
if n in memo:
return memo[n]
if n <= 0:
return 0
elif n == 1:
return 1
else:
memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo)
return memo[n]
print(fibonacci(10)) # Saída: 55
9. Funções Puras
Funções que sempre retornam o mesmo resultado para os mesmos inputs e não têm efeitos colaterais.
Exemplo Avançado:
Vamos criar uma função pura para calcular imposto de um produto.
def calcular_imposto(preco, taxa=0.1):
return preco * (1 + taxa)
print(calcular_imposto(1000)) # Saída: 1100.0
print(calcular_imposto(1000, 0.2)) # Saída: 1200.0
Esses exemplos mais avançados mostram como a programação funcional pode ser aplicada a problemas do mundo real de maneira mais eficiente. 🚀