Módulo: Python
Aula 4
© Copyright 2018-2019 [Link] - All Rights
Tema da aula:
Aula 4 - Funções
● Tudo sobre Funções
● Recursividade
● Lambda
© Copyright 2018-2019 [Link] - All Rights Reserved
O que são funções?
● Funções são blocos de código que podem ser reutilizados para realizar
uma tarefa
● Elas ajudam a organizar e dividir o código em partes menores e mais
fáceis de lidar
● As funções permitem que você reutilize o mesmo bloco de código várias
vezes sem precisar escrevê-lo novamente
● Também possibilita dividir tarefas complexas em funções menores e mais
específicas
© Copyright 2018-2019 [Link] - All Rights Reserved
A função mais simples possível
● Para criar uma função, basta usar a palavra def, seguida do nome da
função, parênteses e dois pontos e escrever o código em baixo dela
indentado:
def minha_funcao():
print('A função executou')
● Para chamar a função, basta usar o seu nome seguido de parênteses:
● minha_funcao()
© Copyright 2018-2019 [Link] - All Rights Reserved
Receber valores na função
● A função pode ter parâmetros que recebem valores quando ela for
chamada, que são os argumentos:
def calcula_IMC(peso, altura):
print('O seu IMC é: ', peso/(altura**2))
● Para chamar a função, deve passar a lista de argumentos entre
parênteses:
calcula_IMC(72, 1.80)
© Copyright 2018-2019 [Link] - All Rights Reserved
Devolver valores da função
● A função também pode passar para fora um valor no final, que será
recebido por quem a chamou, para isso use a palavra return:
def calcula_IMC(peso, altura):
return peso/(altura**2)
● Na hora de chamar a função, você pode salvar o valor em uma variável
ou usar para qualquer outra finalidade:
valor_imc = calcula_IMC(72, 1.80)
© Copyright 2018-2019 [Link] - All Rights Reserved
Retornar mais de um valor
● É possível retornar vários valores, usando uma tupla:
def calcula_IMC(peso, altura):
imc = peso/(altura**2)
if imc < 18.5:
texto = 'Abaixo do peso'
elif imc < 25:
texto = 'Dentro do esperado'
else:
texto = 'Acima do peso'
return imc, texto
● Na hora de receber os valores, usar o desempacotamento:
valor_imc, texto = calcula_IMC(72, 1.80)
© Copyright 2018-2019 [Link] - All Rights Reserved
Escopo de variáveis e funções dentro de funções
variavel_1 = 'Essa é global'
def funcao_fora():
variavel_1 = 'Essa passou por cima da global'
variavel_2 = 'Essa só existe dentro da função fora e função dentro'
def funcao_dentro():
global variavel_1,variavel_3
variavel_1 = 'Essa mudou o valor da variavel_1 de fora'
variavel_3 = 'Essa criou uma global também'
variavel_4 = 'Essa só existe na função dentro'
funcao_dentro()
funcao_fora()
© Copyright 2018-2019 [Link] - All Rights Reserved
Transformar nosso programa em uma função principal
def main():
print('Meu código executa aqui')
if __name__ == '__main__':
main()
© Copyright 2018-2019 [Link] - All Rights Reserved
Parâmetros com valor opcional ou padrão
def imprimir_temperatura(valor, unidade='C', com_texto=False):
if com_texto:
print('A temperatura é: ', end='')
print(valor, end='')
if unidade == 'C':
print('°C')
elif unidade == 'F':
print('°F')
elif unidade == 'K':
print('K')
© Copyright 2018-2019 [Link] - All Rights Reserved
Passar argumento posicional ou palavra-chave
● Argumentos podem ser passados através da ordem em que aparecem nos
parâmetros da função, o que é chamado de argumento posicional:
imprimir_temperatura(25, 'C', True)
● Ou podem ser passados em qualquer ordem usando os nomes dos
parâmetros, que são os argumentos palavra-chave:
imprimir_temperatura(unidade='C', com_texto=True, valor=25)
© Copyright 2018-2019 [Link] - All Rights Reserved
*args → “Infinitos” argumentos posicionais
● Para ter uma função que pode receber quantos argumentos posicionais o usuário
quiser passar, sem dizer exatamente quantos, é preciso usar essa funcionalidade:
def maior_numero(*args):
if len(args) == 0: ● Esses argumentos vão vir na forma de
return None uma tupla, ou seja, args é uma tupla
dentro da função
maior = args[0]
for numero in args: ● Esses argumentos não tem nome, só
if numero > maior: ordem
maior = numero
return maior
© Copyright 2018-2019 [Link] - All Rights Reserved
**kwargs → “Infinitos” argumentos palavra-chave
● Para ter uma função que pode receber quantos argumentos palavra chave o usuário quiser
passar, sem dizer exatamente quantos, é preciso usar essa funcionalidade:
def imprimir_produto(nome, **kwargs):
descricao = "Produto: " + nome + '\n'
for chave, valor in [Link]():
descricao += f"{chave}: {valor}\n"
print(descricao)
imprimir_produto("Camisa", Material='Algodão', Cor='Azul', Tamanho='M',
Preço=39.90)
● Esses argumentos vão vir na forma de um dicionário, ou seja, kwargs é um dicionário dentro da
função
● Esses argumentos não tem ordem, só nome
© Copyright 2018-2019 [Link] - All Rights Reserved
Usar tuplas ou dicionários para passar argumentos
● Usar tupla para passar argumentos posicionais:
tupla = (72, 1.80)
calcula_IMC(*tupla)
● Usar dicionário para passar argumentos palavra-chave
dicionario = {'valor': 25, 'unidade': 'C', 'com_texto': False}
imprimir_temperatura(**dicionario)
● Pode usar tanto uma variável quanto o próprio dicionário ou tupla direto
© Copyright 2018-2019 [Link] - All Rights Reserved
Tópico Avançado 1: Recursividade
● Funções podem chamar a si mesmas e retornar valores para dentro de si mesmas
que serão usados no cálculo
● Essa é uma ferramenta muito poderosa mas que também pode gerar confusão
● Toda função recursiva precisa “saber quando parar”, pois se ela chamar a si
mesma uma quantidade muito grande de vezes sem voltar, dará erro
● O problema do fatorial da aula 1 pode ser resolvido em 1 linha com recursividade:
def fatorial(x):
return 1 if x <= 1 else x * fatorial(x-1)
© Copyright 2018-2019 [Link] - All Rights Reserved
Tópico Avançado 2: Lambda
● Outro tipo de função que existe no python é a função lambda, ela é criada com a
palavra lambda, seguida de uma lista de parâmetros, dois pontos e logo em
seguida alguma expressão que determina o que a função faz, exemplos:
celsius_para_fahrenheit = lambda celsius: (celsius * 9/5) + 32
print(celsius_para_fahrenheit(25))
area_retangulo = lambda comprimento, largura: comprimento * largura
print(area_retangulo(10,20))
© Copyright 2018-2019 [Link] - All Rights Reserved
Desafio dos juros
● Crie uma função que recebe do usuário um valor de capital, um valor de juros, um número de meses e uma
letra que pode ser ‘S’ para simples ou ‘C’ para compostos e retorna esses 4 valores como uma tupla
● Crie uma função que recebe o valor do capital, o valor dos juros e a quantidade de meses que durou a
aplicação e retorna o valor final, usando a fórmula de juros simples
● Crie outra função que recebe o valor do capital, o valor dos juros e a quantidade de meses que durou a
aplicação e retorna o valor final, usando a fórmula de juros compostos
● Faça um programa usando essas 3 funções que pergunte ao usuário pelos valores e depois mostre o resultado
● Fórmulas: Simples = capital * taxa * tempo; Composto = capital * (1 + taxa)^tempo
[Link]
[Link]
© Copyright 2018-2019 [Link] - All Rights Reserved
Desafio do desvio padrão
● Crie uma função “leitura” que lê do terminal uma quantidade e vai ler do usuário
essa quantidade de números float e vai retornar esses números todos como uma
lista
● Crie uma função “soma” que recebe quantos argumentos o usuário quiser e retorna
a soma deles (usa *args)
● Crie uma função “media” que usa a função 2 para calcular a média de quantos
argumentos o usuário quiser (usa *args)
● Crie uma função “subtrai” que recebe uma lista e um número X e subtrai X de todos
os números da lista e retorna ela
Σ significa a soma
● Crie uma função “quadrado” que recebe uma lista e transforma todos os números da dos valores
lista no quadrado deles e retorna ela
● Crie uma função “raiz” que retorna a raiz do número float passado para ela
● Use todas essas funções para calcular o desvio padrão seguindo a fórmula, que é
um valor muito importante na ciência de dados
© Copyright 2018-2019 [Link] - All Rights Reserved
Desafio Bhaskara (Lambda)
● Crie um programa que recebe do usuário os coeficientes a, b e c de uma equação do segundo
grau
● Crie uma função lambda que calcula o valor de delta
● Crie uma função lambda que calcula o valor da raiz x’
● Crie uma função lambda que calcula o valor da raiz x’’
● Imprima o valor das raízes para o usuário
● Use apenas funções lambda nesse programa
● Cuidado com erros devido a raiz de número negativo
© Copyright 2018-2019 [Link] - All Rights Reserved
Desafio Fibonacci (Recursividade)
● Crie um programa que recebe um número inteiro do usuário e calcula o Fibonacci daquele
número
● Fibonacci de zero é zero, Fibonacci de um é um
● Fibonacci de qualquer número depois desse, é a soma do dois Fibonaccis que vieram antes,
por exemplo F(2) = F(1) + F(0) e F(3) = F(2) + F(1)
● Em linguagem matemática genérica: F(n) = F(n-1) + F(n-2)
● Use recursividade para resolver esse problema
● Valores que devem sair para cada número:
© Copyright 2018-2019 [Link] - All Rights Reserved
Desafio bônus para quem tiver tempo
● Refaça o desafio do desvio padrão substituindo todas as funções exceto a “leitura” por funções
lambda
● No final faça com que uma única função lambda que usa as outras lambdas gere o resultado
final em uma única linha
© Copyright 2018-2019 [Link] - All Rights Reserved
Desafio bônus do bônus para quem tiver mais tempo
● Refaça os desafios das aulas 1, 2 e 3, transformando os pedaços de código importantes ou
que se repetem em funções
© Copyright 2018-2019 [Link] - All Rights Reserved
71 3901 1052 | 71 9 9204 0134
@infi[Link]
[Link]fi[Link]
Salvador Shopping Business | Torre Europa Sala
310 Caminho das Árvores, Salvador - BA CEP:
40301-155
© Copyright 2018-2019 [Link] - All Rights