As funções escritas no Python são consideradas objetos de primeira classe. O status equivalente dos outros objetos é dado às funções no Python. As funções podem ser criadas e destruídas dinamicamente, atribuídas a variáveis, salvas em coleções, fornecidas como argumentos e mais. O termo "funções aninhadas", às vezes conhecido como "funções internas", refere -se a funções que são definidas dentro das outras funções.
É uma função aninhada chamada mensagem de construção. Sua função principal externa é onde é definido e chamado.
Em sua forma mais básica, o fechamento é apenas uma função aninhada que tem acesso a uma variável livre sobrando após a execução de uma função de anexo. Um fechamento de Python tem essas três propriedades:
Diz -se que qualquer variável não ligada no escopo local é livre. A palavra-chave não local é necessária para que o fechamento funcione com variáveis imutáveis, como cordas e números inteiros. Os fechamentos de Python oferecem algum tipo de mascaramento de dados e ajudam a evitar o uso de variáveis globais.
Escopo de variáveis
Também devemos aprender sobre o escopo da variável python para compreender os fechamentos mais plenamente. O escopo é uma região onde a variável é observável. Somente o intervalo especificado de uma variável pode ser utilizado. De acordo com os três escopos diferentes, as variáveis geralmente podem ser alocadas em três locais separados:
Por que usar fechamentos?
Os principais motivos pelos quais contratamos decoradores são descritos na lista a seguir:
Quando o python cria o fechamento?
Python cria um novo escopo cada vez que uma função é invocada. Python produz adicionalmente um novo fechamento se essa função produzir um.
Crie uma função chamada multiplicadora que produz um fechamento primeiro. A multiplicação de duas entradas é o que a função multiplicadora retorna. Mas utiliza um fechamento no lugar disso. Adicione três chamadas à função multiplicadora a seguir. Três fechamentos são produzidos chamando essas funções. Um número é multiplicado por 2, 4 e 5 por cada função. Em seguida, execute as funções dos fechamentos.
Exemplo 1:
Para invocar uma função interna de fora da função externa, devemos primeiro descobrir como. Esses métodos podem retornar um valor. Aqui, "T" e "U" são variáveis locais da função f ().
Como as variáveis “t” e “u” não podem mais ser acessadas após a execução de H = f (), todas as variáveis de f (local) se foram. No entanto, ainda mantemos o valor "T" que foi devolvido e salvo em H. Assim, podemos ser capazes de ter a função externa retornar a função interna. As funções de primeira classe do Python tornam viável para isso. Isso implica que, como o python interpreta as funções como valores, você pode atribuí -los às variáveis, fornecer como argumentos de função ou ter outra função devolvê -los.
Exemplo 2:
Este exemplo mostra que a função interna “G” é retornada pela função externa f (t).
A função g () agora é retornada pela expressão f (t). Ao atribuir o valor de "G" a "H" quando escrevemos H = f (i), "H" agora pode ser considerado "G" e assumir o argumento de G. H (j) é equivalente a chamar "G" como resultado (J).
Exemplo 3:
A função g (), não um valor particular disso, é o que f (t) retorna. Leve esta instância em consideração para isso e escreva o seguinte:
Este código retorna um erro. Isso significa que encontramos um erro. Não podemos usar "h" para invocar uma função, pois retornamos o resultado de g (u) de f (t), o que é um motivo para o erro.
Exemplo 4:
Não precisamos manter f (a) em "h". A alternativa é chamar F (a) diretamente (b). Considere a seguinte ilustração:
A necessidade de fazer a diferença entre f (a, b) e f (a) deve sempre ser lembrada (b). Requer dois parâmetros para chamar a função f (a, b). A função f (a) (b), por outro lado, é uma série de funções aninhadas, cada uma das quais aceita apenas uma entrada. Conhecido como uma função unária, esse tipo de função aceita apenas uma entrada. Consequentemente, F (a) (b) é uma série de duas funções unilárias aninhadas. Então, f (a) é avaliado pela primeira vez. Para encadear essas funções, f (a) deve retornar uma função. Aqui, ele retorna a função interna "g". Consequentemente, f (a) (b) = g (b).
Exemplo 5:
O uso de uma série mais longa de funções unárias é simplesmente possível, estendendo a abordagem atual. As três funções unárias aninhadas também podem ser vistas neste caso. A primeira função, f (t), tem uma função nela chamada g (u), e g (u) tem uma função dentro dele chamada h (v). Cada função interna é retornada por sua função externa.
Aqui, definimos as funções. Essas funções retornam os valores. Em seguida, inicializamos três variáveis e atribuímos três números inteiros diferentes. Em seguida, chamamos essas variáveis de atributos da função.
Exemplo 6:
Suponha que existem algumas variáveis não -locais na função externa. Vamos ver o que acontece.
Executar demonstra que opera sem problemas e que G (u) tem acesso a "T" e "V". No entanto, como é até concebível? Agora que estamos fora do alcance de F (t), assim "t" e "v" não deve ser alcançado depois que f (t) for realizado. Por que G (u) ainda é capaz de acessá -los? É pela razão que g (u), a função interna, agora é um fechamento.
Exemplo 7:
Vamos modificar a função interna usada nesta instância.
Se isso acontecer, não se pode mais dizer um fechamento. A explicação é que G (u) não acessa as variáveis não -locais "T" e "V". Portanto, G (u) não é obrigado a registrá -los.
Exemplo 8:
Nesse caso, veremos se definirmos os valores de dois parâmetros das funções iguais, então essa função está definida como um fechamento ou não.
Mais uma vez, "t" é necessário apenas para inicializar "u" neste caso. Portanto, g (u) não é um fechamento porque "g" não precisa declarar "t".
Conclusão
Neste guia, conversamos sobre o fechamento do Python. Também executamos os diferentes códigos relacionados a este tópico. Exigimos uma função dentro do fechamento para definir o seguinte:
Em outras palavras, uma função e um escopo expandido com variáveis livres são considerados fechamentos. Chamar a função externa para retornar o fechamento é necessário após declarar o fechamento para inicializá -lo.