30/05/2022
Prof. André Backes
Função
Funções são blocos de código que podem ser
nomeados e chamados de dentro de um programa.
print(): função que escreve na tela
input (): função que lê o teclado
1
30/05/2022
Função
Facilitam a estruturação e reutilização do código.
Estruturação: programas grandes e complexos são
construídos bloco a bloco.
Reutilização: o uso de funções evita a cópia
desnecessária de trechos de código que realizam a
mesma tarefa, diminuindo assim o tamanho do
programa e a ocorrência de erros
Função – Ordem de Execução
Ao chamar uma função, o programa que a chamou é
pausado até que a função termine a sua execução
Exemplo Saída
2
30/05/2022
Função - Estrutura
Forma geral de uma função
Toda função começa com o comando def, seguido de
um nome associado a aquela função, nomefunção
Função - Corpo
O corpo da função é a sua alma.
É formado pelos comandos que a função deve executar
Ele processa os parâmetros (se houver), realiza outras
tarefas e gera saídas (se necessário)
3
30/05/2022
Função - Corpo
De modo geral, evita-se fazer operações de leitura e
escrita dentro de uma função
Uma função é construída com o intuito de realizar uma
tarefa específica e bem-definida
As operações de entrada e saída de dados (input () e
print()) devem ser feitas em quem chamou a função
Isso assegura que a função construída possa ser utilizada
nas mais diversas aplicações, garantindo a sua
generalidade
Função - Parâmetros
A lista de parâmetros é uma lista de variáveis
nome1, nome2, ... , nomeN
Pode-se definir quantos parâmetros achar necessários
Pode-se deixar os parênteses vazios se a função não
recebe nenhum parâmetro de entrada
4
30/05/2022
Função - Parâmetros
É por meio dos parâmetros que uma função recebe
informação do programa principal (isto é, de quem a
chamou)
Não é preciso fazer a leitura das variáveis dos parâmetros
dentro da função
Na chamada abaixo, o parâmetro x recebeu o valor 5
enquanto o parâmetro y recebeu o valor de z
Função - Parâmetros
Podemos definir valores padrão para parâmetros da
função (tem de vir sempre no final)
Isso faz com que aquele parâmetro se torne opcional,
ou seja, se não for definido o valor padrão será usado.
Exemplo:
Saída:
5
30/05/2022
Função - Retorno
Uma função pode ou não retornar um valor
Se ela retornar um valor, alguém deverá receber este
valor. O valor retornado pela função é dado pelo
comando return
Função - Retorno
Uma função pode ter mais de uma declaração return.
Quando o comando return é executado, a função
termina imediatamente
Todos os comandos restantes são ignorados
6
30/05/2022
Declaração de Funções
Funções devem ser declaradas antes de serem
utilizadas
Exemplo
Saída
Declaração de Funções
Uma função criada pelo programador pode utilizar
qualquer outra função, inclusive as que foram criadas
Exemplo
Saída
7
30/05/2022
Variáveis dentro da função
Funções estão sujeitas ao escopo das variáveis
Uma variável definida no programa e sem indentação é
global. Ou seja, ela pode ser acessada em qualquer lugar
do programa ou função
Exemplo Saída
Variáveis dentro da função
Funções estão sujeitas ao escopo das variáveis
Uma variável global pode ser acessada em qualquer
lugar do programa ou função, mas não pode ser alterada
pela função
Na verdade, ao tentar alterar uma variável global o que ocorre
é a criação de uma variável local que ofusca completamente a
variável global
Exemplo Saída
8
30/05/2022
Variáveis dentro da função
Funções estão sujeitas ao escopo das variáveis
Para atribuir um novo valor a uma variável global
precisamos utilizar o comando global
Isso faz com que a variável manipulada dentro da função
seja a do escopo global
Exemplo Saída
Variáveis dentro da função
Funções estão sujeitas ao escopo das variáveis
Variáveis definidas dentro da função (com indentação
ou parâmetros) somente podem ser acessadas dentro da
função, nunca fora dela
Exemplo
Saída
9
30/05/2022
Passagem de Parâmetros
Em várias linguagens de programação, o tipo de
passagem de parâmetros usado define se as
modificações realizadas nos parâmetros dentro da
função se irão se refletir fora da função
Na linguagem Python, os parâmetros de uma função
podem ou não ser modificado, sendo definidos como
mutáveis e imutáveis
Passagem de Parâmetros
Na verdade, sempre que passamos um parâmetro para
a função, estamos passando a referência a um objeto
via atribuição
10
30/05/2022
Passagem de Parâmetros
Porém, atribuições dentro da função geram novos
objetos, fazendo com que o conteúdo do parâmetro
passado originalmente se torne imutável
Exemplo Saída
Passagem de Parâmetros
Parâmetros imutáveis
O conteúdo/valor do parâmetro
é modificado dentro da função
via atribuição.
Isso gera um novo objeto
Mesmo que esse valor mude
dentro da função, nada
acontece com o valor de fora da
função
11
30/05/2022
Passagem de Parâmetros
Parâmetros mutáveis
O conteúdo/valor do
parâmetro é modificado
dentro da função sem
usar a operação de
atribuição
Isso gera não um novo
objeto
Nesse caso, alterar o
parâmetro pode
influenciar no “valor” da
variável fora da função
Recursão
Em Python, uma função pode chamar outra função
Por exemplo, dentro de qualquer função que nós
criarmos é possível chamar a função print() ou input(),
ou qualquer função definida pelo programador
Uma função também pode chamar a si própria
A qual chamamos de função recursiva.
12
30/05/2022
Recursão
A recursão também é chamada de definição circular.
Ela ocorre quando algo é definido em termos de si
mesmo.
Um exemplo clássico de função que usa recursão é o
cálculo do fatorial de um número:
3! = 3 * 2!
4! = 4 * 3!
n! = n * (n - 1)!
Recursão
0! = 1
1! = 1 * 0!
2! = 2 * 1!
3! = 3 * 2!
4! = 4 * 3!
n! = n * (n - 1)! : fórmula geral
0! = 1 : caso-base
13
30/05/2022
Recursão
Em geral, formulações recursivas de algoritmos são
frequentemente consideradas "mais enxutas" ou "mais
elegantes" do que formulações iterativas
Porém, algoritmos recursivos tendem a necessitar de
mais espaço de memória do que algoritmos iterativos
Recursão - fatorial
Sem recursão Com recursão
14
30/05/2022
Recursão
Todo cuidado é pouco ao se fazer funções recursivas
Critério de parada: determina quando a função deverá
parar de chamar a si mesma
O parâmetro da chamada recursiva deve ser sempre
modificado, de forma que a recursão chegue a um
término
Recursão
Exemplo: fatorial
15
30/05/2022
Recursão
O que acontece na chamada da função fatorial com um
valor como N = 4?
y= fatorial (4);
Recursão
Uma vez que chegamos ao caso-base, é hora de fazer o
caminho de volta da recursão.
16
30/05/2022
Fibonacci
Essa sequência é um exemplo clássico de recursão
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Sua solução recursiva é muito mais elegante e
simples...
Fibonacci
... mas como se verifica na imagem, elegância não
significa eficiência
2 1
fibo(4)
1 1 1 0
fibo(3) fibo(2)
1 0
fibo(2) fibo(1) fibo(1) fibo(0)
fibo(1) fibo(0)
17
30/05/2022
Fibonacci
Aumentando para fibo(5)
3 2
fibo(5)
2 1 1 1
fibo(4) fibo(3)
1 1 1 0 1 0
fibo(3) fibo(2) fibo(2) fibo(1)
0
1 0
fibo(2) 0 fibo(1) fibo(1) fibo(0) fibo(1) fibo(0)
fibo(1) fibo(0)
Fibonacci
Comparação de tempo
Execução
Saída
18
30/05/2022
Material Complementar
Vídeo Aulas
Aula 28 - Função: definição
https://youtu.be/JiltwM2iqJE
Aula 29 - Função: declaração
https://youtu.be/yhC4MAqHBPw
Aula 30 - Função: variáveis e escopo
https://youtu.be/egIV7E7KvdI
Material Complementar
Vídeo Aulas
Aula 31 - Função: passagem de parâmetros
https://youtu.be/JFpodcSZsHw
Aula 32 - Função: recursão (parte 1)
https://youtu.be/O__z52PzkfY
Aula 33 - Função: recursão (parte 2)
https://youtu.be/clIhHcHB9n8
19