Descomplicando as funções em Python
- #Python
O que é uma função?
Neste artigo abordaremos uma das ferramentas mais úteis das linguagens de programação: as funções.
Suponha que você precise de executar uma tarefa diversas vezes, como por exemplo calcular o quadrado de um número, printar uma mensagem de "Tarefa concluída com sucesso" na tela, ou até realizar uma conexão com um banco de dados e retornar um código de erro ou de sucesso. Não seria viável ficar replicando o mesmo código várias vezes para mudar somente um valor ou outro, o que geraria um código sujo e ineficiente. Para isso existem as funções, que são nada mais do que blocos de código que podem ser "chamados" dentro do programa principal quantas vezes for necessário, permitindo uma melhor abstração e organização do seu código. Esses blocos de código que desempenham uma função específica, podem ou não ter valores de entrada e de retorno, que serão explicados a seguir.
Como funcionam as funções
Para abstrair o funcionamento de uma função, imagine uma caixinha. Nesta caixinha você pode colocar algo na entrada dela, dentro dela este "algo" será trabalhado, e depois ela te devolve um resultado com base naquilo que você colocou na entrada, conforme a imagem a seguir:
É exatamente assim que funciona uma função, este "algo" que você colocou na entrada dela, pode ser um número, um texto, uma lista de valores, e pode até haver mais de uma entrada. Dentro da caixinha estará o código que trabalhará em cima do valor (ou valores) de entrada, e no final da execução da "caixinha" ela pode devolver algo, como um número, texto, lista, objeto, etc.
Como por exemplo:
# pseudocódigo
função calculo(A,B,C):
resultado = A + 2*B + 3*C
retorne resultado
Neste caso, a função chamada "calculo" recebe 3 parâmetros de entrada, realiza um cálculo dentro dela e me retorna o valor resultante. Ela recebe 3 números, multiplica o segundo número por 2, o terceiro por 3, soma os valores e guarda na variável "resultado", a qual será o meu valor de retorno (ou saída) da minha função.
Este é um exemplo completo de uma função, porém elas podem não ter variáveis de entrada ou não possuir um retorno, e sim, você pode chamar uma função dentro da outra!
Funções em Python
Assim como nas outras linguagens de programação, as funções estão presentes também no Python, e elas são usadas a todo tempo por você mesmo que não perceba. Por exemplo a função:
print("Hello World!")
É uma função nativa do Python, de nome "print", a qual recebe uma String como parâmetro de entrada ("Hello World!" nesse caso), e sua execução faz imprimir essa String no console de saída da execução do programa. Este é um exemplo de função que não possui retorno.
Outra função mais complexa é a "fit" da biblioteca Keras, utilizada para treinar um modelo de inteligência artificial. Ela possui diversos valores de entrada e te retorna uma lista de parâmetros de avaliação do seu modelo a cada época do treino. Se não existissem as funções, você teria que implementar isso tudo do zero toda vez que precisasse de treinar um modelo! Graças às funções, você resolve o problema com uma linha de código:
history = model.fit(img_train, label_train, epochs=100, ...)
Criando sua própria função
Para criar sua própria função no Python, é utilizado a palavra reservada "def" (associe como "defining a function" para lembrar), seguido do nome da função (sem espaços), um par de parênteses contendo dentro deles as variáveis de entrada separadas por vírgula, e por fim dois pontos, para indicar ao Python que se inicia o escopo (bloco de código) da função. No Python, o escopo é definido pela identação do código, ao contrário da maioria das linguagens em que o escopo fica entre chaves. O final do escopo é marcado com a palavra reservada "return" a qual finaliza a função e retorna o valor (ou valores) de saída. Caso sua função não tiver um retorno, é só voltar ao nível de identação da cláusula "def".
def function_name(param1,param2, ...):
...code...
...code...
...code...
return variable_x
Mãos na massa!
Vamos criar uma função para calcular as raízes de uma equação de segundo grau, a famosa equação de Bhaskara
Para isso, precisamos dos coeficientes da equação de segundo grau (a,b e c), o escopo será o cálculo da equação e o retorno será os dois valores das raízes. Para auxiliar, vamos criar uma segunda função chamada delta que irá calcular o valor que fica dentro da raiz quadrada. Assim:
import math
#calcula, printa e retorna o valor de delta
def calc_delta(a,b,c):
delta = (b*b) - (4*a*c)
print("Delta: ",delta)
return delta
#calcula a equação de Bhaskara
def bhaskara(a,b,c):
delta = calc_delta(a,b,c)
#verifica se o delta é negativo
if (delta<0):
print("Não existe raiz real para delta negativo: ",delta)
return 0,0 #finaliza a função bhaskara e retorna dois zeros
raiz_delta = math.sqrt(delta)
x1 = (-b + raiz_delta) / (2*a)
x2 = (-b - raiz_delta) / (2*a)
return x1,x2
Neste caso usa-se a função "calc_delta" como auxiliar dentro da própria função "bhaskara", e para calcular a raiz quadrada de delta, utilizou-se a função "sqrt" da biblioteca math, que foi importada na primeira linha. A função "if" do Python testa uma condição (delta negativo nesse caso) e executa seu bloco caso a condição for verdadeira. No exemplo, em caso do delta ser negativo, é exibida uma mensagem e a função finaliza sua execução retornando dois zeros.
Definida a função, agora precisamos chamar ela no programa principal e passar os valores de entrada:
x1,x2 = bhaskara(1,-3,-54)
print("Raiz 1:", x1)
print("Raiz 2:", x2)
Neste exemplo a saída será:
Delta: 225
Raiz 1: 9.0
Raiz 2: -6.0
Agora é com você, use sua criatividade para criar e manipular funções e tornar o seu código muito mais prático!