Dominando Funções em Python: Definição, Chamada, Indentação, Argumentos e Valores de Retorno
Dominando Funções em Python: Definição, Chamada, Indentação, Argumentos e Valores de Retorno
Funções são os blocos de construção de qualquer aplicação Python. Elas encapsulam lógica reutilizável, mantêm o código DRY (Don't Repeat Yourself) e tornam seus programas mais fáceis de ler, testar e manter. Neste guia, percorreremos cada passo necessário para escrever, chamar e solucionar problemas em funções no Python 3 — abordando também as diferenças que você encontrará no Python 2.
O que é uma Função em Python?
Uma função Python é um bloco de código autocontido que é executado quando invocado. Você pode pensá-la como um mini-programa que realiza uma única tarefa bem definida e pode ser reutilizada onde for necessário. Embora o Python venha com diversas funções nativas (ex.: print(), input()), você pode criar as suas próprias, dando ao seu código o poder de evoluir e escalar.
Definindo e Chamando uma Função
Funções são declaradas com a palavra-chave def, seguida pelo nome da função e uma lista de parâmetros entre parênteses. O corpo da função começa com dois-pontos e deve ser indentado.
def saudacao():
print("Olá, Python!")
# Chama a função
saudacao()
Saída: Olá, Python!
Por que a Indentação Importa
O Python não usa chaves ou declarações explícitas begin/end. Em vez disso, a indentação define o escopo. Todo bloco de código — funções, loops, condicionais — deve compartilhar um nível de indentação consistente.
- Pelo menos um nível de indentação (tipicamente quatro espaços) é obrigatório após a definição da função.
- Todas as instruções dentro da função devem usar a mesma indentação.
- Misturar tabs e espaços, ou variar a profundidade da indentação, dispara um
IndentationError.
Exemplo de indentação correta:
def demo():
print("Linha 1")
print("Linha 2")
E um erro comum:
def demo():
print("Ops")
Que gera: IndentationError: expected an indented block
Usando Instruções Return
A palavra-chave return envia um valor de volta para quem chamou a função. Se uma função chega ao fim sem encontrar um return, ela retorna implicitamente None.
def quadrado(x):
return x * x
print(quadrado(4)) # 16
Sem return:
def quadrado(x):
x * x
print(quadrado(4)) # None
Além disso, imprimir o objeto da função em si (ex.: print(quadrado)) exibe seu endereço de memória, o que raramente é útil no código de aplicação.
Passando Argumentos para Funções
Argumentos fornecem os dados que a função precisa para operar. Parâmetros são os placeholders definidos na assinatura da função.
def multiplicar(x, y=1):
return x * y
print(multiplicar(4)) # 4 (y assume o padrão 1)
print(multiplicar(4, 2)) # 8
print(multiplicar(y=3, x=2)) # 6 (argumentos nomeados permitem reordenar)
Argumentos de Comprimento Variável (*args e **kwargs)
Às vezes você precisa de uma função que aceite um número arbitrário de argumentos. Use *args para argumentos posicionais e **kwargs para argumentos nomeados.
def resumir(*valores, **opcoes):
total = sum(valores)
print(f"Total: {total}")
if opcoes.get("mostrar_detalhes"):
print("Valores:", valores)
resumir(1, 2, 3, 4, 5, mostrar_detalhes=True)
Python 2 vs Python 3: Diferenças Principais
- Sintaxe do print:
print "texto"no Python 2 vsprint("texto")no Python 3. - Sobrecarga de funções (múltiplas assinaturas com o mesmo nome) não é suportada no Python 2, mas está disponível no Python 3 via
functools.singledispatchou inspecionando tipos de argumentos. - Divisão inteira:
5/2resulta em2no Python 2 e2.5no Python 3 (use//para divisão inteira em ambas as versões).
Boas Práticas para Design de Funções
- Mantenha as funções focadas: uma função deve realizar uma única tarefa clara.
- Documente com uma docstring na primeira linha dentro da função.
def somar(a, b): """Retorna a soma de a e b.""" return a + b - Use type hints (Python 3.5+) para esclarecer os tipos esperados dos argumentos e do retorno.
def somar(a: int, b: int) -> int: return a + b - Prefira argumentos nomeados para parâmetros opcionais para melhorar a legibilidade.
Exemplo Completo
# Exemplo de script Python 3 abrangente
def saudacao():
"""Imprime uma saudação amigável."""
print("Olá, Python!")
def quadrado(x: int) -> int:
"""Retorna o quadrado de x."""
return x * x
def multiplicar(x: int, y: int = 1) -> int:
"""Retorna o produto de x e y, com y default 1."""
return x * y
# Demonstração
if __name__ == "__main__":
saudacao()
print(quadrado(4)) # 16
print(multiplicar(4)) # 4
print(multiplicar(4, 2)) # 8
print(multiplicar(y=2, x=4)) # 8
Para orientações mais detalhadas, consulte a documentação oficial do Python sobre definições de funções.
python
- Declarações, Indentação e Comentários em Python: Guia Claro
- Dominando Argumentos de Funções em Python: Parâmetros Posicionais, Nomeados e Padrão
- Funções Lambda em Python: Guia Prático para Funções Anônimas
- Generators em Python: Iteração Eficiente e Casos de Uso Avançados
- Closures em Python Explicados: Como Funções Aninhadas Capturam Variáveis
- Dominando Decorators em Python: Aprimore Funções com Técnicas de Especialista
- Funções em C++ Explicadas com Exemplos Práticos de Código
- Dominando Funções Lambda em Python: Exemplos Práticos e Boas Práticas
- Função abs() em Python: Calcular Valores Absolutos para Números e Complexos
- Função round() em Python Explicada com Exemplos Práticos