Pular para o conteúdo principal

Aula 05: Modularização com Funções

Objetivos de Aprendizagem

Ao final desta aula, você deve ser capaz de:

  1. Definir e chamar funções com def.
  2. Usar parâmetros e argumentos para tornar funções reutilizáveis.
  3. Diferenciar função que imprime de função que retorna valor.
  4. Aplicar noções básicas de escopo local.
  5. Organizar código em funções curtas e com nomes descritivos.

Conteúdo

1) O que é uma função

Uma função é um bloco de código reutilizável que executa uma tarefa específica.

def saudacao():
print("Olá, turma!")

saudacao()

Anatomia de uma função

Cada função em Python possui componentes estruturados. Observe o diagrama abaixo:

Anatomia de uma função Python

Os componentes principais são:

  • def: palavra-chave que define uma função
  • Nome da função: identificador descritivo (calcular_media, saudar, etc.)
  • Parâmetros: variáveis entre parênteses que recebem valores
  • Corpo (indentado): bloco de código que executa a lógica da função
  • Return: entrega um valor de volta para quem chamou a função

No exemplo do diagrama, calcular_media(n1, n2) recebe dois parâmetros e retorna o resultado da média. Quando você chama calcular_media(8.0, 6.0), o valor 7.0 é devolvido e armazenado na variável media.

2) Parâmetros e argumentos

Parâmetros são variáveis declaradas na função. Argumentos são os valores passados na chamada.

def saudacao_nome(nome):
print(f"Olá, {nome}!")

saudacao_nome("Ana")
saudacao_nome("Carlos")

Passagem de parâmetros

A relação entre argumentos (valores passados) e parâmetros (variáveis da função) é ilustrada abaixo:

Passagem de parâmetros e argumentos

Como funciona:

  1. Na chamada (esquerda): você fornece argumentos — os valores reais, como 8.0 e 6.0
  2. Na definição (direita): você declara parâmetros — variáveis que recebem esses valores (n1, n2)
  3. Correspondência: o primeiro argumento se conecta ao primeiro parâmetro, o segundo ao segundo, e assim por diante
  4. Retorno: a função processa e devolve um valor (no caso, 7.0)

3) Funções com retorno (return)

Use return quando a função precisa entregar um valor para ser usado depois.

def soma(a, b):
return a + b

resultado = soma(10, 7)
print(f"Resultado: {resultado}")

Diferença entre print e return

def mostra_soma(a, b):
print(a + b)

def retorna_soma(a, b):
return a + b

x = mostra_soma(2, 3) # imprime 5, mas x recebe None
y = retorna_soma(2, 3) # y recebe 5

print(x)
print(y)

4) Escopo local (introdução)

Variáveis criadas dentro da função são locais da função.

def exemplo_escopo():
mensagem = "Estou dentro da função"
print(mensagem)

exemplo_escopo()
# print(mensagem) # geraria erro: NameError

Escopo local vs. escopo global

O diagrama abaixo mostra a diferença entre variáveis globais e locais:

Escopo local versus escopo global

Entendendo o exemplo:

  • Escopo global (fora das funções): x = 10 é acessível em qualquer lugar do código
  • Escopo local da função (dentro de minha_funcao): mensagem = "Olá!" existe apenas enquanto a função está sendo executada
  • Erro de acesso: tentar usar mensagem fora da função causa NameError porque ela não foi definida no escopo global

Regra importante: uma variável definida dentro de uma função é local; não pode ser usada fora dela a menos que seja retornada ou definida globalmente.

5) Boas práticas de modularização

  • Dê nomes claros para funções (calcular_media, validar_idade).
  • Prefira funções curtas com uma responsabilidade.
  • Evite duplicar código: extraia lógica repetida para função.
  • Use parâmetros em vez de valores fixos quando possível.

6) Exemplos contextualizados

Exemplo A: cálculo de média com função

def calcular_media(n1, n2, n3):
return (n1 + n2 + n3) / 3

media = calcular_media(8.0, 7.5, 9.0)
print(f"Média: {media:.2f}")

Saída esperada: Média: 8.17

Exemplo B: mensagem de aprovação

def aprovado(media):
return media >= 6

resultado = aprovado(5.9)
print(f"Aprovado? {resultado}")

Saída esperada: Aprovado? False

Exercícios (checkpoints)

  1. Crie uma função dobro(numero) que retorna o dobro do valor recebido.
    • Critério de verificação: para dobro(7), o resultado deve ser 14.
  2. Escreva uma função saudar(nome) que imprime uma saudação personalizada.
    • Critério de verificação: para saudar("Lia"), a saída deve conter Lia.
  3. Crie uma função media(n1, n2) com return.
    • Critério de verificação: para media(8, 6), o resultado deve ser 7.0.
  4. Reescreva um trecho repetido do seu código anterior usando função.
    • Critério de verificação: o comportamento final deve permanecer igual.
  5. Faça uma função pode_votar(idade) que retorna True se idade >= 16.
    • Critério de verificação: para 15, deve retornar False.
  6. Crie uma função que receba preço e desconto percentual e retorne o preço final.
    • Critério de verificação: para 100 e 10, o resultado deve ser 90.

Referências

Principais

Aprofundamento