Aqui vamos falar sobre funções em Python, aprenderemos quase tudo, como o que são e como criá-las.
Definições e uso de funções em Python
No contexto da programação, uma função é uma sequência nomeada de instruções que realiza uma operação desejada. Esta operação é especificada em uma definição de função. Em Python, a sintaxe para a definição de uma função é:
def nome_da_funcao (parâmetros):
afirmações
Você pode inventar qualquer nome que desejar para as funções que criar, exceto pelo fato de não poder usar um nome que seja uma palavra-chave do Python. A lista de parâmetros especifica quais informações, se houver, você deve fornecer para usar a nova função.
Pode haver qualquer número de instruções dentro da função, mas eles devem ser indentados a partir do def. As definições de função têm o mesmo padrão:
Um cabeçalho, que começa com uma palavra-chave e termina com dois pontos.
Um corpo que consiste em uma ou mais instruções Python, cada uma com indentação na mesma quantidade - 4 espaços é o padrão Python - no cabeçalho.
Em uma definição de função, a palavra-chave no cabeçalho é def, que é seguida pelo nome da função e uma lista de parâmetros entre parênteses. A lista de parâmetros pode estar vazia ou pode conter qualquer número de parâmetros. Em ambos os casos, os parênteses são obrigatórios.
As primeiras funções que vamos escrever não têm parâmetros, então a sintaxe se parece com esta:
def nova_linnha():
print () # uma instrução de impressão sem argumentos imprime uma nova linha
Esta função é denominada nova_linha. Os parênteses vazios indicam que não há parâmetros. Seu corpo contém apenas uma única instrução, que produz um caractere de nova linha. (Isso é o que acontece quando você usa um comando de impressão sem nenhum argumento.)
Definir uma nova função não a executa. Para fazer isso, precisamos de uma chamada de função. As chamadas de função contêm o nome da função que está sendo executada, seguido por uma lista de valores, chamados de argumentos, que são atribuídos aos parâmetros na definição da função.
Nossos primeiros exemplos têm uma lista de parâmetros vazia, portanto, as chamadas de função não levam nenhum argumento. Observe, no entanto, que os parênteses são necessários na chamada de função:
def nova_linha():
print () # uma instrução de impressão sem argumentos imprime uma nova linha
print("Primeira linha.")
nova_linha()
print("Segunda Linha.")
O resultado deste programa é:
Primeira linha.
Segunda Linha.
O espaço extra entre as duas linhas é resultado da chamada da função nova_linha(). E se quiséssemos mais espaço entre as linhas? Poderíamos chamar a mesma função repetidamente:
def nova_linha():
print () # uma instrução de impressão sem argumentos imprime uma nova linha
print("Primeira linha.")
nova_linha()
nova_linha()
nova_linha()
print("Segunda Linha.")
Ou poderíamos escrever uma nova função chamada tres_linhas que imprime três novas linhas:
def nova_linha():
print () # uma instrução de impressão sem argumentos imprime uma nova linha
def tres_linhas():
nova_linha()
nova_linha()
nova_linha()
print("Primeira linha.")
tres_linhas()
print("Segunda Linha.")
Esta função contém três instruções, todas recuadas por quatro espaços. Como a próxima instrução não é identada, Python sabe que ela não faz parte da função.
Você deve observar algumas coisas sobre este programa:
Você pode chamar o mesmo procedimento repetidamente. Na verdade, é bastante comum e útil fazer isso.
Você pode fazer com que uma função chame outra função; neste caso, tres_linhas chama nova_linha.
Até agora, pode não estar claro por que vale a pena criar todas essas novas funções. Na verdade, existem vários motivos, mas este exemplo demonstra dois:
A criação de uma nova função oferece a oportunidade de nomear um grupo de declarações. As funções podem simplificar um programa, ocultando um cálculo complexo por trás de um único comando e usando palavras no lugar de código misterioso.
A criação de uma nova função pode tornar um programa menor, eliminando o código repetitivo. Por exemplo, uma maneira rápida de imprimir nove novas linhas consecutivas é chamar tres_linha() três vezes.
Fluxo de execução em Python
Para garantir que uma função seja definida antes de seu primeiro uso, você deve saber a ordem em que as instruções são executadas, o que é chamado de fluxo de execução.
A execução sempre começa na primeira instrução do programa. As instruções são executadas uma de cada vez, de cima para baixo.
As definições de função não alteram o fluxo de execução do programa, mas lembre-se de que as instruções dentro da função não são executadas até que a função seja chamada. Embora não seja comum, você pode definir uma função dentro de outra. Neste caso, a definição interna não é executada até que a função externa seja chamada.
As chamadas de função são como um desvio no fluxo de execução. Em vez de ir para a próxima instrução, o fluxo salta para a primeira linha da função chamada, executa todas as instruções lá e, em seguida, volta para retomar de onde parou.
Isso parece bastante simples, até você lembrar que uma função pode chamar outra. Enquanto estiver no meio de uma função, o programa pode ter que executar as instruções em outra função. Mas enquanto executa essa nova função, o programa pode ter que executar outra função!
Felizmente, o Python é adepto de manter o controle de onde está, portanto, cada vez que uma função é concluída, o programa continua de onde parou na função que a chamou. Quando chega ao final do programa, ele é encerrado.
Qual é a moral deste conto sórdido? Quando você lê um programa, não leia de cima para baixo. Em vez disso, siga o fluxo de execução.
Parâmetros, argumentos e a instrução de importação no Python
A maioria das funções requer argumentos, valores que controlam como a função realiza seu trabalho. Por exemplo, se você deseja encontrar o valor absoluto de um número, você deve indicar qual é o número. Python tem uma função integrada para calcular o valor absoluto:
print(abs(5)) # 5
print(abs(-5)) # 5
Neste exemplo, os argumentos para a função abs são 5 e -5.
Algumas funções aceitam mais de um argumento. Por exemplo, a função embutida pow leva dois argumentos, a base e o expoente. Dentro da função, os valores passados são atribuídos a variáveis chamadas parâmetros.
print(pow(2, 3)) # 8
print(pow(7, 2)) # 49
Outra função incorporada que leva mais de um argumento é max.
print(max(7, 11)) # 11
print(max(4, 1, 17, 2, 12)) # 17
print(max(3 * 11, 5**3, 512 - 9, 1024**0)) # 503
max pode ser enviado com qualquer número de argumentos, separados por vírgulas, e retornará o valor máximo enviado. Os argumentos podem ser valores simples ou expressões. No último exemplo, 503 é retornado, pois é maior que 33, 125 e 1.
Aqui está um exemplo de uma função definida pelo usuário que tem um parâmetro:
def imprima_duas_vezes(param):
print(param, param)
Esta função recebe um único argumento e o atribui ao parâmetro denominado param. O valor do parâmetro (neste ponto não temos ideia de qual será) é impresso duas vezes, seguido por uma nova linha. O nome param foi escolhido para reforçar a ideia de que é um parâmetro, mas em geral, você desejará escolher um nome para seus parâmetros que descreva seu uso na função.
imprima_duas_vezes('joao')
# joao joao
Qualquer tipo de argumento que pode ser impresso pode ser enviado.
Composição
Assim como com as funções matemáticas, as funções do Python podem ser compostas, o que significa que você usa o resultado de uma função como entrada para outra.
def imprima_duas_vezes(param):
print(param, param)
imprima_duas_vezes(abs(-7))
# 7 7
imprima_duas_vezes(max(3, 1, abs(-11), 7))
# 11 11
No primeiro exemplo, abs (-7) é avaliado como 7, que então se torna o argumento para imprima_duas_vezes. No segundo exemplo, temos dois níveis de composição, uma vez que abs (-11) é primeiro avaliado como 11 antes que max (3, 1, 11, 7) seja avaliado como 11 e imprima_duas_vezes (11) então exibe o resultado.
frase = 'João, o meio abelha.'
def imprima_duas_vezes(param):
print(param, param)
imprima_duas_vezes(frase)
# João, o meio abelha. João, o meio abelha.
Variáveis e parâmetros são locais em funções no Python
Quando você cria uma variável local dentro de uma função, ela só existe dentro da função e você não pode usá-la fora. Por exemplo:
def soma(a, b):
resultado = a+b
print(resultado)
Esta função pega dois argumentos, concatena-os e, a seguir, imprime o resultado duas vezes. Podemos chamar a função com duas strings:
soma(5,5) # 10
soma(2,2) # 4
soma(2,3) # 5
Quando soma termina, a variável resultado é destruído. Se tentarmos imprimi-lo, obteremos um erro:
print(resultado)
# NameError: name 'resultado' is not defined
Os parâmetros também são locais. Por exemplo, fora da função imprima_duas_vezes , não existe algo como param. Se você tentar usá-lo, o Python reclamará.
Algumas definições importantes sobre funções em Python
O que é um argumento
Um valor fornecido a uma função quando a função é chamada. Este valor é atribuído ao parâmetro correspondente na função.
corpo
A segunda parte de uma declaração composta. O corpo consiste em uma sequência de instruções, todas recuadas com o mesmo valor desde o início do cabeçalho. A quantidade padrão de indentação usada na comunidade Python é de 4 espaços.
declaração composta
Uma declaração que consiste em duas partes:
cabeçalho - que começa com uma palavra-chave determinando o tipo de instrução e termina com dois pontos.
corpo - contendo uma ou mais instruções recuadas com o mesmo valor do cabeçalho.
A sintaxe de uma instrução composta é assim:
expressão_de_palavra-chave:
declaração
declaração ...
O que é fluxo de execução?
A ordem em que as instruções são executadas durante a execução de um programa.
o que é uma função ?
Uma sequência nomeada de instruções que executa alguma operação útil. As funções podem ou não aceitar parâmetros e podem ou não produzir um resultado.
chamada de função
Uma instrução que executa uma função. Consiste no nome da função seguido por uma lista de argumentos entre parênteses.
composição de função
Usando a saída de uma chamada de função como entrada para outra.
definição de função
Uma instrução que cria uma nova função, especificando seu nome, parâmetros e as instruções que executa.
cabeçalho
A primeira parte de uma declaração composta. Os cabeçalhos começam com uma palavra-chave e terminam com dois pontos (:)
import
Uma instrução que permite que funções e variáveis definidas em um script Python sejam trazidas para o ambiente de outro script
O que é uma variável local em python?
Uma variável definida dentro de uma função. Uma variável local só pode ser usada dentro de sua função.
O que é um parâmetro em Python?
Um nome usado dentro de uma função para se referir ao valor passado como um argumento.
traceback
Uma lista das funções em execução, impressa quando ocorre um erro de tempo de execução. Um traceback também é comumente referido como rastreamento de pilha, uma vez que lista as funções na ordem em que são armazenadas na pilha de tempo de execução.
0 Comentários