Aula 06: Funções, Bibliotecas e Depuração
Objetivos de Aprendizagem
Ao final desta aula, você deve ser capaz de:
- Definir funções com parâmetros com valor padrão.
- Compreender o escopo de variáveis (local vs. global).
- Importar e usar módulos da biblioteca padrão do Python (
math,random). - Aplicar técnicas básicas de depuração com
print. - Usar o debugger do VS Code para inspecionar a execução do programa.
Conteúdo
1) Parâmetros com valor padrão
Funções podem ter parâmetros com valor padrão, usados quando o argumento não é passado.
def saudacao(nome, periodo="dia"):
print(f"Bom {periodo}, {nome}!")
saudacao("Ana") # Bom dia, Ana!
saudacao("Carlos", "tarde") # Boa tarde, Carlos!
Parâmetros com valor padrão devem sempre vir depois dos obrigatórios.
2) Escopo de variáveis
O escopo define onde uma variável pode ser acessada.
total = 0 # variável global
def adicionar(valor):
resultado = total + valor # resultado é local
return resultado
print(adicionar(5)) # 5
# print(resultado) # NameError: resultado não existe aqui
Evite modificar variáveis globais dentro de funções. Prefira usar parâmetros e retorno.
# Ruim
contador = 0
def incrementar():
global contador
contador += 1
# Melhor
def incrementar(contador):
return contador + 1
contador = 0
contador = incrementar(contador)
3) Biblioteca padrão: módulo math
O módulo math oferece funções e constantes matemáticas.
import math
print(math.pi) # 3.141592653589793
print(math.sqrt(16)) # 4.0
print(math.ceil(2.3)) # 3 (arredonda para cima)
print(math.floor(2.9)) # 2 (arredonda para baixo)
print(math.pow(2, 10)) # 1024.0
Exemplo: área do círculo
import math
def area_circulo(raio):
return math.pi * math.pow(raio, 2)
print(f"Área: {area_circulo(5):.2f}")
Saída esperada: Área: 78.54
4) Biblioteca padrão: módulo random
O módulo random gera valores aleatórios.
import random
print(random.randint(1, 6)) # número inteiro entre 1 e 6
print(random.random()) # número float entre 0.0 e 1.0
nomes = ["Alice", "Bob", "Carol"]
print(random.choice(nomes)) # escolhe um elemento da lista
Exemplo: simulação de dado
import random
def rolar_dado(lados=6):
return random.randint(1, lados)
print(f"Você tirou: {rolar_dado()}")
print(f"Dado de 12 lados: {rolar_dado(12)}")
5) Principais módulos da biblioteca padrão
Python inclui uma vasta biblioteca padrão — módulos prontos para uso que não exigem instalação de pacotes externos. A tabela abaixo lista os mais úteis para o dia a dia:
Módulo (import) | Principais funções/recursos | Documentação |
|---|---|---|
math | Funções matemáticas para uso geral. sqrt(x) — raiz quadrada; pow(x, y) — potência; ceil(x) / floor(x) — arredondamento; log(x) — logaritmo; sin(x) / cos(x) — trigonometria; constantes pi e e. | docs.python.org |
random | Geração de valores aleatórios. randint(a, b) — inteiro entre a e b; random() — float entre 0 e 1; choice(seq) — escolhe um elemento; shuffle(seq) — embaralha in-place; sample(seq, k) — amostra sem repetição. | docs.python.org |
statistics | Estatística descritiva simples. mean(data) — média; median(data) — mediana; mode(data) — valor mais frequente; stdev(data) — desvio padrão; variance(data) — variância. | docs.python.org |
datetime | Manipulação de datas e horas. datetime.now() — data/hora atual; date.today() — data de hoje; timedelta(days=n) — diferença entre datas; formatação com strftime() e parsing com strptime(). | docs.python.org |
time | Controle de tempo e medição de desempenho. sleep(s) — pausa a execução por s segundos; time() — timestamp Unix; perf_counter() — cronômetro de alta precisão para medir tempo de execução. | docs.python.org |
os | Interação com o sistema operacional. getcwd() — diretório atual; listdir(path) — lista arquivos; mkdir(path) — cria diretório; path.join() — concatena caminhos; path.exists() — verifica se existe. | docs.python.org |
pathlib | Manipulação moderna de caminhos de arquivo. Path(p) — cria objeto de caminho; .read_text() / .write_text() — lê/grava arquivos; .exists() — verifica existência; .glob(pattern) — busca arquivos por padrão. | docs.python.org |
sys | Acesso a parâmetros e funções do interpretador Python. argv — lista de argumentos da linha de comando; exit(code) — encerra o programa; version — versão do Python; stdin / stdout — streams padrão. | docs.python.org |
json | Serialização e desserialização de dados no formato JSON. dumps(obj) — converte objeto Python para string JSON; loads(s) — converte string JSON para Python; dump() / load() — equivalentes para arquivos. | docs.python.org |
csv | Leitura e escrita de arquivos CSV. reader(f) — itera linhas como listas; writer(f) — grava linhas; DictReader(f) — lê cada linha como dicionário; DictWriter(f) — grava dicionários. | docs.python.org |
re | Expressões regulares para busca e manipulação de texto. search(pattern, s) — encontra primeira ocorrência; findall() — lista todas; sub(pattern, repl, s) — substitui; compile() — pré-compila padrão para reuso. | docs.python.org |
string | Constantes e utilitários para texto. ascii_letters — todas as letras; digits — "0123456789"; punctuation — sinais de pontuação; whitespace — espaços em branco; Template — interpolação segura de strings. | docs.python.org |
collections | Estruturas de dados especializadas. Counter(iterable) — conta ocorrências; deque — fila de duas pontas eficiente; defaultdict — dicionário com valor padrão; namedtuple — tupla com campos nomeados. | docs.python.org |
itertools | Iteradores de alta performance para laços. chain() — concatena iteráveis; product() — produto cartesiano; combinations() / permutations() — combinatória; cycle() — repete infinitamente; islice() — fatia iterador. | docs.python.org |
functools | Ferramentas para programação funcional. reduce(func, iterable) — aplica função acumulativamente; partial() — fixa argumentos de uma função; lru_cache() — memoização automática; wraps() — preserva metadados de decoradores. | docs.python.org |
Para explorar todos os módulos disponíveis, consulte o índice da biblioteca padrão.
6) Depuração com print
A forma mais simples de depurar é usar print para inspecionar valores intermediários.
def calcular_desconto(preco, percentual):
print(f"[DEBUG] preco={preco}, percentual={percentual}")
desconto = preco * (percentual / 100)
print(f"[DEBUG] desconto calculado={desconto}")
return preco - desconto
resultado = calcular_desconto(200, 15)
print(f"Preço final: {resultado}")
Boas práticas:
- Use um prefixo como
[DEBUG]para identificar prints de depuração. - Remova os prints de depuração antes de entregar o código final.
7) Depuração com o debugger do VS Code
O VS Code possui um debugger integrado que permite pausar a execução e inspecionar variáveis.
Passos básicos:
- Clique na margem esquerda da linha de código para definir um breakpoint (ponto vermelho).
- Pressione
F5para iniciar a depuração. - Use os controles para navegar:
- Step Over (
F10): executa a linha atual e vai para a próxima. - Step Into (
F11): entra dentro da função sendo chamada. - Continue (
F5): retoma até o próximo breakpoint.
- Step Over (
- Observe os valores das variáveis no painel Variables.
O debugger é mais eficiente que
Exercícios (checkpoints)
- Crie uma função
potencia(base, expoente=2)que retornabaseelevado aexpoente.- Critério de verificação:
potencia(3)deve retornar9;potencia(2, 10)deve retornar1024.
- Critério de verificação:
- Crie uma função
hipotenusa(a, b)usandomath.sqrtque retorna a hipotenusa de um triângulo retângulo.- Critério de verificação:
hipotenusa(3, 4)deve retornar5.0.
- Critério de verificação:
- Escreva um programa que simula 5 lançamentos de um dado de 6 lados usando
random.randint.- Critério de verificação: todos os valores devem estar entre 1 e 6.
- Adicione prints de depuração a uma função existente, execute e depois os remova.
- Critério de verificação: a função deve ter o comportamento correto sem prints de debug ao final.
- Use
random.choicepara selecionar aleatoriamente um item de uma lista de 4 frutas.- Critério de verificação: o item impresso deve pertencer à lista original.
- Crie uma função
arredondar_cima(valor)usandomath.ceile use o debugger para verificar o valor recebido.- Critério de verificação:
arredondar_cima(4.1)deve retornar5.
- Critério de verificação:
Referências
Principais
- Python Docs —
mathmodule: https://docs.python.org/3/library/math.html - Python Docs —
randommodule: https://docs.python.org/3/library/random.html - Python Docs — Default Argument Values: https://docs.python.org/3/tutorial/controlflow.html#default-argument-values
Aprofundamento
- Real Python — Python Scope & the LEGB Rule: https://realpython.com/python-scope-legb-rule/
- VS Code Docs — Python Debugging: https://code.visualstudio.com/docs/python/debugging