Fundamentos de Funções e Expressões Lambda em Python

Definição e Estrutura de Funções

No desenvolvimento em Python, funções são blocos de construção essenciais que permitem o reaproveitamento de código e a modularização da lógica. A sintaxe básica utiliza a palavra-chave def seguida pelo nome da função e parênteses.

# Função sem parâmetros e sem retorno
def exibir_saudacao():
    print("Olá, bem-vindo ao sistema!")

exibir_saudacao()

# Função sem parâmetros com retorno de valor
def obter_versao_sistema():
    return "v2.1.0"

print(f"Versão atual: {obter_versao_sistema()}")

# Função com parâmetros sem retorno
def registrar_log(mensagem):
    print(f"[LOG]: {mensagem}")

registrar_log("Inicializando processos...")

# Função com parâmetros e retorno (Cálculo de somatório)
def calcular_soma_intervalo(limite):
    total = 0
    for n in range(1, limite + 1):
        total += n
    return total

resultado = calcular_soma_intervalo(50)
print(f"A soma de 1 a 50 é: {resultado}")

Gerenciamento de Parâmetros

Parâmetros com Valores Padrão

Python permite definir valores padrão para argumentos. Caso o chamador não forneça um valor, o padrão é utilizado. É mandatório que parâmetros com valores padrão sejam declarados após os parâmetros obrigatórios.

def configurar_conexao(host, porta=8080):
    print(f"Conectando a {host} na porta {porta}")

# Chamada omitindo o parâmetro padrão
configurar_conexao("127.0.0.1")

# Chamada sobrescrevendo o valor padrão
configurar_conexao("192.168.0.1", porta=443)

Argumentos de Extensão Variável (*args e **kwargs)

Para funções que precisam lidar com um número dinâmico de argumentos, utiliza-se *args para capturar múltiplos argumentos posicionais (como uma tupla) e **kwargs para argumentos nomeados (como um dicionário).

def processar_pedido(cliente, *itens, **detalhes):
    print(f"Cliente: {cliente}")
    print("Itens solicitados:", itens)
    print("Informações adicionais:")
    for chave, valor in detalhes.items():
        print(f" - {chave}: {valor}")

processar_pedido("João Silva", "Laptop", "Mouse", "Teclado", frete="Expresso", cupom="DESC10")

Mecânica de Passagem por Referência

Em Python, todos os parâmetros são passados por referência. No entanto, o comportamento difere entre tipos mutáveis e imutáveis:

  • Imutáveis (int, string, tuple): O valor original não é alterado, pois qualquer modificação gera um novo objeto.
  • Mutáveis (list, dict): Alterações realizadas dentro da função refletem diretamente no objeto original.
def modificar_objetos(valor, lista):
    valor += 10
    lista.append("Novo Item")
    print(f"Interno - Inteiro: {valor}, Lista: {lista}")

# Teste com imutável (int) e mutável (list)
meu_num = 5
minha_lista = ["Item A"]

modificar_objetos(meu_num, minha_lista)

print(f"Externo - Inteiro: {meu_num}, Lista: {minha_lista}")
# O inteiro permanece 5, mas a lista foi modificada.

Funções Anônimas (Lambda)

Expressões lambda são funções de uma única linha, frequentemente utilizadas para operações rápidas onde uma definição formal via def seria excessiva.

# Estrutura: lambda argumentos: expressão
multiplicador = lambda x, y: x * y

print(f"Resultado da multiplicação: {multiplicador(5, 4)}")

Aplicações Práticas de Lambdas

As lambdas são poderosas quando usadas como argumentos para outras funções ou métodos de ordenação.

# 1. Callback em funções de alta ordem
def operacao_matematica(a, b, acao):
    return acao(a, b)

resultado_subtracao = operacao_matematica(20, 8, lambda x, y: x - y)
print(f"Subtração via lambda: {resultado_subtracao}")

# 2. Ordenação de estruturas complexas
produtos = [
    {"nome": "Monitor", "preco": 1200},
    {"nome": "Cadeira", "preco": 850},
    {"nome": "Mesa", "preco": 1500}
]

# Ordenar por preço de forma crescente
produtos.sort(key=lambda item: item["preco"])
print("Ordenado por preço:", produtos)

# Ordenar alfabeticamente pelo nome
produtos.sort(key=lambda item: item["nome"])
print("Ordenado por nome:", produtos)

Tags: Python backend functions Lambda data-structures

Publicado em 8-8 16:44