Funções

Teoria Completa

Utilidade das funções

Funções são blocos de código que você consegue salvar pra reutilizar. Quando você declara uma função, você tá salvando um “modelo” de código, que fica guardadinho esperando você precisar. Sempre que precisar, tu pode chamar a sua função que você já criou e aquele bloco de código vai ser executado pra você. É muito útil pra evitar códigos repetitivos. Sempre que você tiver um conjunto de códigos que servem pra uma tarefa específica, o ideal é você colocar dentro de uma função. Agora vem comigo que vou te mostrar como se cria uma função!

Estrutura geral de funções

Geralmente as funções têm essa cara

A palavra-chave “def” específica que o que vem a seguir é uma função, é uma representação interna de python e você precisa usar sempre que quiser criar uma função. Você pode lembrar que você precisa DEFinir uma função.

Em seguida, você põe um nome arbitrário pra sua função. Mas não esquece que bons nomes são importantes pra não confundir sua cabecinha durante a prova, ok?! Além disso, os parâmetros ali são uma sequência de variáveis pré-criadas, separadas por vírgulas, pra ser usada na função. As variáveis criadas como parâmetros podem ser definidas de fora da função. Uma função pode não tem nenhum parâmetro, mas mesmo assim você precisa colocar os parênteses vazios, okay?! Mas pra você entender melhor, nada melhor que criar uma função na prática daqui a pouquinho. Dá uma segurada aí!

Palavra-chave return

No corpo da função, você pode digitar qualquer sequência de código. Assim como você digitaria fora de funções. Lembre-se que funções guardam código pronto. Mas, somente dentro de funções você pode usar a palavra-chave return. Esse comando tem duas utilidades.

Primeiramente, ele define o fim da função. Quando o comando return for executado, a função acaba imediatamente, ok?!

Segundamente, esse comando devolve pro código que chamou a função o resultado da expressão que você colocar junto com o return. Você vai entender tudo agora no exemplo, eu juro.

Exemplo de função

Vamos criar uma função responsável por calcular a área de triângulos

Primeiro a gente disse que quer definir uma função, usando a palavra-chave “def”. Depois, criamos um nome arbitrário, mas repara que ele é bem autoexplicativo. Vamos precisar do nome pra chamar a função quando a gente quiser.

Em seguida, abrimos parênteses e criamos dentro duas variáveis. Essas variáveis são especiais, chamadas parâmetros, porque podem ser definidas externamente. Você vai entender melhor a utilidade delas nas próximas linhas do código.

Depois de definir o cabeçalho da função, colocamos “:” e partimos pro corpo da função, na linha seguinte. Repara que todo código que a gente quer que faça parte da função é colocado uma indentação a frente. Isto é, o corpo da função começa um pouco mais à direita que o cabeçalho. Esse espaçamento é dado apertando a tecla TAB, que fica embaixo do seu botão de aspas no teclado. Essa tecla se parece com isso:

Logo na primeira linha do corpo da função, nós usamos a palavra-chave “return”. Essa palavra-chave diz que a nossa função deve parar e retornar o valor da expressão que vem depois. Nesse caso, retorna o resultado da expressão “base * altura / 2”. Caso você não seja um ser humaninho bom de memória, é a fórmula da área do triângulo beleza?!

Olha o que a gente tá fazendo em baixo

Colei a mesma imagem aqui pra você não ter que ficar subindo toda hora

Criamos uma variável chamada “triangulo_1” e colocamos dentro dela o resultado de area_triangulo(4,6). Isso significa que o valor dentro de triangulo_1 vai ser o resultado da expressão no return da função, mas considerando base = 4 e altura = 6. Isso porque a gente passou, em ordem, esses valores dentro dos parênteses. As variáveis que recebem esses valores externos na função são chamados parâmetros, e os valores externos que a gente coloca dentro são chamados argumentos. Nesse caso, “base” e “altura” são os parâmetros e “4” e “6” são argumentos.

Em baixo a gente fez a mesma coisa pra uma outra variável, mas usando valores de base e altura diferentes. O resultado depois de executar esse programa é assim:

Viu, a gente conseguiu reaproveitar o código responsável por calcular a área do triângulo e usar em dois lugares diferentes, sem muito esforço. Ok, eu assumo, calcular a área do triângulo era uma tarefa simples, mas você pode usar a técnica das funções pra fazer reaproveitamento de código. Todo código que se repete de forma igual ou parecida deve ser colocado dentro de uma função, ok?!

Escopo de funções

Cada função tem seu corpo, e esse corpo é privado. Não é possível acessar o código escrito dentro de uma função externamente. Isso significa que toda variável que você criar dentro de uma função só existe dentro dela, sendo impossível acessar de outros lugares. Olha, outro exemplo:

Se liga que essa função não tem a palavra-chave “return”. Não é obrigatório usar, mas aí sua função não retorna nada. Logo, você não pode fazer variável = função(). Repara que eu chamei a função pelo nome, sem passar nenhum parâmetro, e não coloquei dentro de nenhuma variável.

Variáveis globais

Quando a gente cria variáveis dentro das funções, é impossível acessar de fora delas. Mas o oposto também é parecido! Normalmente, a gente apenas consegue ler variáveis globais de dentro de função, mas não consegue alterar elas! Olha:

Viu? A gente consegue ler o valor das variáveis de fora das funções, mas a gente NÃO consegue escrever nelas. Mas existe uma forma da gente conseguir permissão pra alterar essas variáveis, e a gente pede essa permissão com a palavra-chave “global”.

Mas saca que a gente tá alterando a variável global, hein!! Olha só:

O resultado do último print vai ser 246!!

Funções built-in

Você aprendeu a criar funções agora, mas a verdade é que você já vem usando funções há muito tempo. Todos aqueles comando, print(), input(), int(), etc, são todos funções! Essas funções já vieram prontas, programadas pelos criadores de Python. Elas são chamadas built-in porque já vem dentro de Python, sacou?!

Beleza, que venham os exercícios!! Valeuuu

Expandir

Exercício Resolvido #1

PUC-Rio

Faça uma função que receba uma lista de números armazenados de forma crescente, e dois valores ( limite inferior e limite superior), e exiba a sublista cujos elementos são maiores ou iguais ao limite inferior e menores ou iguais ao limite superior.

Exemplo:

lista inicial=[12,14,15,16,18,20,24,26,28,32,34,38]

limite inferior=13

limite superior = 26

lista exibida: [14,15,16,18,20,24,26]

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Fala aí! É muito bom quando o enunciado fornece dados de teste! Hahah primeiramente, vamos escrever nossos dados de teste no nosso programa.

Agora, precisamos escrever uma função que receba esses dados e exiba [14,15,16,18,20,24,26]. Beleza, vamos lá! Pra criar uma função, usamos a palavra-chave def, damos um nome pra nossa função e depois os parâmetros, entre parênteses.

Passo 2

Pra isso, vamos criar uma nova lista e adicionar nela os elementos que satisfazem a condição.

Aqui a gente criou uma outra lista com nome de sublista, e fizemos o cabeçalho do nosso loop. Esse loop vai percorrer cada item da lista que a gente recebeu. No fim, precisamos exibir a lista resultante, então eu já até coloquei o print(sublista) ali.

Passo 3

Pra gente checar se o item tá entre os limites menor e maior, recebido como parâmetro, vamos usar um if.

Se liga que a gente usou “maior ou igual” e “menor ou igual”. Isso é porque no enunciado a resultante incluiu o 26. Se liga que se a gente quisesse todos os elementos menores, o 26 não viria junto. Esse dado foi uma dica que o enuncado deu. Agora, vamos escrever o código que acrescenta itens na sublista.

Pronto! Nessa função, será exibida a lista dentro dos limites recebidos como parâmetro. Pra gente testar, vamos chamar a função com os parâmetros de teste no fim do programa.

Viu?! Quando executar, o resultado vai ser igualzinho ao do professor. Mas se liga que o enunciado pediu só a função, não pediu os dados de teste e nem o teste. Por isso, vamos deixar no código só a função.

Pronto! Agora sim a gente concluiu o exercício! Até mais, cara!

Resposta

Exercício Resolvido #2

UFRN- 2019

Python é uma linguagem de programação de alto nível, interpretada, orientada a objetos, funcional, de tipagem dinâmica e forte. Levando isso em conta, analise o código em Python abaixo. 

Nesse caso, ao executar o programa, o valor impresso será?

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Fala aí! Esse exercício não requer que a gente escreva, mas sim que a gente pense sobre o funcionamento das funções. O resultado de uma função é dado pelo valor junto a palavra-chave “return”. Por isso, é possível notar que a função e() do enunciado retorna o quadrado do valor que a gente passar como parâmetro. Porém, quando e(b) é, o valor retornado não está sendo salvo em nenhuma variável, e nem sendo usado pra nada! O ponto é que a função NÃO modifica a variável “a”. Por isso, o resultado de print(e(a)) é 100 (o quadrado de a = 10).

Resposta

100

Exercício Resolvido #3

Unicamp, 2016

Escreva uma funcão reps em Python que recebe uma lista e retorna uma outra lista contendo apenas os elementos que aparecem duas ou mais vezes na lista de entrada.

Exemplo:

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Beleza, o professor MANDOU a gente fazer uma função chamada reps que RETORNA (e não exibe) uma lista que só tenha os números repetidos na primeira. Vamos começar criando a função.

Agora, precisamos pensar sobre como descobrir se um item se repete ou não. Ok, existe uma função nativa de Python que faz isso, mas com certeza seu professor não quer que você use, ok?! A ideia é usar repetições... Então, vamo lá! Vamos começar criando a lista que a gente vai retornar depois.

Passo 2

Beleza, agora precisamos lidar com a lógica de pegar duplicatas. Uma ideia é a gente iterar por toda lista que recebemos. Quando a gente usa a função index() pra perguntar o índice de um elemento em uma lista, recebemos sua primeira aparição. A gente pode usar isso! Caso o index atual seja diferente da primeira aparição, então é uma duplicata.

E se item for uma duplicata, então a gente adiciona ele na lista de duplicados!

Passo 3

Parece tudo lindo, mas esse código ainda tem um problema. Se existir um mais de uma repetição, ele vai adicionar duas vezes à lista de retorno, e isso não é o que a gente quer.

O ideal é que a gente não tenha itens repetidos na resposta. Pra isso, a gente precisa checar se o item já existe na lista duplicados antes de adicionar!

Agora sim, deu bom! Vamos testar com os dados que o professor passou.

Passo 4

Ops! Apesar da lógica estar funcionando, o resultado não está igual ao do professor. No exemplo, a lista retornada está ordenada. Ele não diz que temos que ordenar também, mas é sempre bom deixar igualzinho! Pra isso, vamos retornar a versão sorted() da nossa lista.