Funções transformam código repetitivo em blocos nomeados e reutilizáveis. Uma função bem escrita tem um propósito claro, recebe dados de entrada (parâmetros), processa e retorna um resultado. É a base de qualquer código Python que escala além de um script de 20 linhas.

Definindo uma função simples

def calcula_bonus(salario, percentual):
    bonus = salario * percentual / 100
    return bonus

# Chamando a função:
resultado = calcula_bonus(5000, 10)
print(f"Bônus: R$ {resultado:.2f}")  # Bônus: R$ 500.00

A função recebe dois parâmetros, calcula e retorna o resultado. Cada chamada pode ter valores diferentes.

Parâmetros com valores padrão

def calcula_bonus(salario, percentual=10, moeda="R$"):
    bonus = salario * percentual / 100
    return f"{moeda} {bonus:.2f}"

print(calcula_bonus(5000))           # R$ 500.00 (usa padrão 10%)
print(calcula_bonus(5000, 15))       # R$ 750.00
print(calcula_bonus(5000, moeda="$"))  # $ 500.00 (kwargs)

Parâmetros com padrão são opcionais. Ao chamar, você pode usar o nome do parâmetro para passar na ordem que quiser.

Retornando múltiplos valores

def analisa_vendas(valores):
    total = sum(valores)
    media = total / len(valores)
    maximo = max(valores)
    return total, media, maximo  # retorna uma tupla

vendas = [1200, 3400, 890, 5600, 2100]
total, media, maior = analisa_vendas(vendas)
print(f"Total: {total}, Média: {media:.0f}, Maior: {maior}")

*args e **kwargs: parâmetros variáveis

def soma_tudo(*numeros):
    # *args captura qualquer número de argumentos como tupla
    return sum(numeros)

print(soma_tudo(1, 2, 3))        # 6
print(soma_tudo(10, 20, 30, 40)) # 100

def exibe_info(**dados):
    # **kwargs captura pares chave=valor como dicionário
    for chave, valor in dados.items():
        print(f"{chave}: {valor}")

exibe_info(nome="Ana", cargo="Analista", salario=6000)

Docstrings: documentando funções

def calcula_bonus(salario, percentual=10):
    '''
    Calcula o bônus de um funcionário.

    Args:
        salario (float): Salário base do funcionário.
        percentual (float): Percentual do bônus (padrão: 10%).

    Returns:
        float: Valor do bônus calculado.
    '''
    return salario * percentual / 100

Docstrings aparecem quando você usa help(calcula_bonus) ou passa o mouse sobre a função no VS Code.

Perguntas frequentes

Qual a diferença entre print() e return?

print() exibe na tela mas a função não devolve nada para quem chamou. return devolve o valor para quem chamou, que pode armazenar e usar. Para funções reutilizáveis, sempre prefira return — print é para depuração e saída final.

O que é uma função lambda?

Lambda é uma função anônima de uma linha: dobro = lambda x: x * 2. Útil para funções simples passadas como argumento (ex: lista.sort(key=lambda x: x["valor"])). Para lógica mais complexa, prefira def com nome descritivo.