⬅ Voltar ao Dashboard Capítulo 8 — Funções

🧰 Funções: Introdução

Seções 8.0–8.1 — Definindo funções, retorno e variáveis locais/globais

📖 O que é uma Função?

Uma função é um trecho de programa que pode ser chamado (executado) várias vezes. Em vez de repetir código, encapsulamos a lógica numa função e a reutilizamos quando necessário.

Em Python, a definição de funções usa a palavra-chave def, seguida do nome, parâmetros entre parênteses e dois-pontos. O corpo é indentado:

Listagem 8.1 — Primeira funçãodef soma(a, b): print(a + b) soma(2, 3) soma(10, 20) soma(-5, 8)
5 30 3

Os valores a e b são parâmetros — placeholders que recebem os valores passados na chamada (argumentos).

💡 Funções permitem dividir um programa grande em partes menores e reutilizáveis. Isso facilita a leitura, o teste e a manutenção do código.

↩️ Retorno de Valores

A função anterior imprime o resultado, mas não o “devolve” ao código que a chamou. Para isso, usamos return:

Listagem 8.2 — Função com retornodef soma(a, b): return a + b resultado = soma(2, 3) print(resultado) print(soma(10, 20)) print(soma(4, 5) * 2)
5 30 18

O return encerra a execução da função e devolve o valor ao chamador. Agora o resultado pode ser armazenado numa variável ou usado em expressões.

Funções que retornam booleanos

Funções podem retornar qualquer tipo — inclusive True/False. Isso as torna legíveis como expressões condicionais:

Listagem 8.3 — Função épardef épar(n): return n % 2 == 0
Listagem 8.4 — Usando épar dentro de outra funçãodef par_ou_impar(n): if épar(n): print(f'{n} é par') else: print(f'{n} é ímpar') par_ou_impar(4) par_ou_impar(7)
4 é par 7 é ímpar

✏️ Exercício 8.1

Escreva uma função dobro(n) que receba um número inteiro e retorne o seu dobro. Teste chamando-a com diferentes valores.

✏️ Exercício 8.2

Escreva uma função media(a, b, c) que receba três números reais e retorne a média aritmética entre eles.

📋 Funções com Listas

Funções aceitam qualquer tipo como parâmetro, inclusive listas. Veja uma função que pesquisa um elemento numa lista:

Listagem 8.5 — Pesquisa em listadef pesquisa(lista, item): for e in lista: if e == item: return True return False nomes = ["Ana", "Bruno", "Carla"] print(pesquisa(nomes, "Bruno")) print(pesquisa(nomes, "Diego"))
True False

Podemos calcular a média de uma lista de valores:

Listagem 8.6 — Cálculo de médiadef media(lista): soma = 0 for e in lista: soma += e return soma / len(lista) notas = [7.5, 8.0, 6.5, 9.0] print(media(notas))
7.75

Funções também podem chamar umas às outras. Abaixo, media usa a função soma:

Listagem 8.7 — Funções que colaboramdef soma(lista): total = 0 for e in lista: total += e return total def media(lista): return soma(lista) / len(lista) notas = [7.5, 8.0, 6.5, 9.0] print(soma(notas)) print(media(notas))
31.0 7.75

✏️ Exercício 8.3

Escreva uma função maior(lista) que receba uma lista de números e retorne o maior deles, sem usar a função embutida max().

✏️ Exercício 8.4

Escreva uma função conta_pares(lista) que retorne quantos números pares existem na lista.

⚠️ Boas Práticas — Evite Funções Rígidas

Uma função bem projetada deve ser geral e reutilizável. O exemplo abaixo mostra como não escrever uma função de soma:

Listagem 8.8 — Como NÃO escrever (função rígida)# Errado: depende de variáveis globais específicas def soma(): return n1 + n2 + n3 + n4 + n5 # Correto: recebe os dados como parâmetros def soma(lista): total = 0 for e in lista: total += e return total

Fatorial Iterativo

O fatorial de n é o produto 1 × 2 × 3 × … × n. Podemos calculá-lo de duas formas iterativas:

Listagem 8.9 — Fatorial iterativo (v1)def fatorial(n): fat = 1 for i in range(1, n + 1): fat *= i return fat print(fatorial(5)) # 120 print(fatorial(10)) # 3628800
Listagem 8.10 — Fatorial iterativo (v2)def fatorial(n): fat = n while n > 1: n -= 1 fat *= n return fat print(fatorial(5)) # 120

✏️ Exercício 8.5

Escreva uma função potencia(base, exp) que calcule base elevado a exp de forma iterativa, sem usar o operador **.

✏️ Exercício 8.6

Escreva uma função combinacao(n, k) que calcule o número de combinações de n elementos tomados k a k, usando a função fatorial.

🔐 8.1 Variáveis Locais e Globais

Variáveis criadas dentro de uma função são locais — existem apenas durante a execução da função e não são visíveis fora dela. Variáveis criadas fora de qualquer função são globais.

Exemplo — Variável localEMPRESA = "Python S.A." # global def muda_e_imprime(): EMPRESA = "Java Ltda." # local — não altera a global! print(EMPRESA) muda_e_imprime() # imprime "Java Ltda." print(EMPRESA) # imprime "Python S.A." (inalterada)
Java Ltda. Python S.A.

Para que uma função modifique uma variável global, é necessário declará-la com global:

Listagem — Usando a palavra-chave globalEMPRESA = "Python S.A." def muda_e_imprime(): global EMPRESA EMPRESA = "Java Ltda." print(EMPRESA) muda_e_imprime() # imprime "Java Ltda." print(EMPRESA) # imprime "Java Ltda." (foi alterada!)
Java Ltda. Java Ltda.

⚠️ Cuidado: o uso excessivo de global dificulta a leitura e o teste do código. Prefira sempre passar valores como parâmetros e receber resultados via return.