Pular para o conteúdo
Praticar: 9 fichas
2ª unidade · atualLição 3 de 4~15 min de leitura9 fichas para praticar

Funções

Uma função é um pedaço de código com nome. Você escreve uma vez com def e usa quantas vezes quiser. Ela recebe valores pelos parâmetros, faz o trabalho e devolve o resultado com return.

Nesta lição0 de 5 vistas
  1. 1As partes de uma função
  2. 2O caminho que o programa faz
  3. 3return ou print?
  4. 4Cada função tem as suas variáveis
  5. 5Como montar a questão
1

As partes de uma função

def, nome, parâmetros, corpo e return
potencia.py
def potencia(x, z):
resultado = 1
i = 0
while i < z:
resultado = resultado * x
i = i + 1
return resultado
print(potencia(2, 10))
ParteO que é
defavisa que vem uma função. Só cria; nada roda ainda
potenciao nome, que você escolhe
(x, z)os parâmetros: variáveis que recebem os valores da chamada
corpo indentadoo trabalho, igual ao de sempre
return resultadotermina a função e devolve o valor
potencia(2, 10)a chamada: x recebe 2, z recebe 10, e a chamada vira 1024
2

O caminho que o programa faz

Pula para dentro da função e volta com o valor

A ordem de execução O Python passa pelo def só para guardar a função. O programa começa de verdade na primeira linha de fora. Na chamada, ele pula para dentro da função, roda até o return e volta para a mesma linha, com o valor no lugar da chamada.

Uma função por dentroentradas: 4
def quadrado(x):
r = x * x
return r
a = int(input())
b = quadrado(a)
print(b + 1)

Nenhuma variável ainda.

Linha 1define a função quadrado(x). O corpo só roda quando ela for chamada.

a saída aparece aqui
1 / 8
3

return ou print?

Função devolve; procedimento só exibe

Função (com return)

exemplo.py
def media(a, b):
return (a + b) / 2
m = media(6, 9)
if m >= 7:
print('APROVADO')

Devolve um valor que o resto do programa usa: guarda, compara, soma. Enunciado com “retorna” ou “devolve”.

Procedimento (sem return)

exemplo.py
def desenhaLinha(n):
print('-' * n)
desenhaLinha(10)

Faz o trabalho e exibe. É chamado sozinho na linha. Enunciado com “exibe”, “imprime” ou “procedimento”.

O que cada programa exibe?

Se exibir mais de uma linha, separe com espaço. Se der erro, escreva erro.

8 perguntas
  1. def dobro(x):
    return x * 2
    print(dobro(5) + 1)
  2. def dobro(x):
    print(x * 2)
    r = dobro(3)
    print(r)
  3. def f(n):
    n = n + 1
    return n
    n = 5
    f(n)
    print(n)
  4. def f(n):
    n = n + 1
    return n
    n = 5
    n = f(n)
    print(n)
  5. def eh_par(n):
    return n % 2 == 0
    print(eh_par(7), eh_par(10))
  6. def primeiro_negativo(v):
    i = 0
    while i < len(v):
    if v[i] < 0:
    return i
    i = i + 1
    return -1
    print(primeiro_negativo([3, 8, -2, -5]))
  7. def soma(a, b):
    s = a + b
    return s
    soma(2, 3)
    print(s)
  8. def area(b, h=1):
    return b * h
    print(area(4), area(4, 3))
4

Cada função tem as suas variáveis

Parâmetro é cópia; variável local some no fim

Parâmetro é cópia

Quando você chama f(n), o parâmetro recebe uma cópia do valor. Mudar o parâmetro lá dentro não muda o n de fora. O valor só sai pelo return.

Variável local some no fim

O que a função cria (o r, o i, a soma) existe só enquanto ela roda. Pode até ter o mesmo nome de uma variável de fora: são caixas diferentes.

Existe o global, que deixa a função mudar uma variável de fora, mas ele esconde de onde o valor veio. Nas listas do professor, tudo se resolve com parâmetros e return.

5

Como montar a questão

Recebe, devolve ou exibe, e quem lê
  1. 1Leia o enunciado procurando três coisas: o que a função recebe (os parâmetros), o que ela devolve (return) ou exibe (procedimento), e quem lê os dados.
  2. 2Escreva o def com os parâmetros e resolva o problema dentro dele como se os valores já existissem.
  3. 3Termine com return (função) ou sem ele (procedimento).
  4. 4Embaixo, sem indentação, o programa principal: lê, chama, exibe.
capicua.py
def inverte(n):
inv = 0
while n > 0:
inv = inv * 10 + n % 10
n = n // 10
return inv
def capicua(n):
return n == inverte(n)
print(capicua(1221), capicua(123))

Uma função pode chamar outra: a capicua usa a função que inverte o número.

Erros que mais aparecem na prova

6 erros
Ler com input() dentro da função que recebe parâmetro.

Quando o enunciado diz “recebe por parâmetro”, o valor chega pronto na chamada. Quem lê é o programa principal. Um input() dentro da função ignora o parâmetro.

Trocar return por print.

print só mostra na tela; return devolve o valor para quem chamou usar. Se o enunciado diz “retorna”, é return. Com print, quem chamou recebe None.

Esquecer de guardar o que voltou.

Chamar f(n) sozinho na linha joga fora o valor devolvido. Guarde (r = f(n)) ou use direto (print(f(n))).

Chamar antes do def.

O Python lê de cima para baixo. A função precisa estar criada antes da linha que a chama. Coloque os def no começo e o programa principal no fim.

return dentro do laço sem querer.

O return termina a função na hora. Num laço que soma, um return na mesma indentação do soma = soma + x devolve já na primeira volta. O return da soma vai depois do laço, fora dele.

Usar a variável da função lá fora.

As variáveis criadas dentro da função somem quando ela termina. Para levar um valor para fora, só pelo return.

Próxima lição: Dicionários ›

Complemento, não atalho. O laboratório ajuda a entender a lógica. Para fixar de verdade, escreva do zero no Thonny ou no seu editor.