Função aninhada:
Uma função aninhada é definida dentro de outra função. Essas funções podem acessar uma variável da função externa. A variável não local que podemos acessar em seu escopo.
Ex:
Defouter_fun (s):Saída:
No exemplo acima, o interno_fun é uma função aninhada e msg é uma variável não local. Podemos acessá -los dentro do corpo externo.
Definição de fechamento:
O fechamento do Python é uma função aninhada. Podemos acessar a variável fora do escopo. Este conceito é essencial para entender os decoradores de Python.
Todas as funções aninhadas não são fechamentos. Os três critérios a seguir devem atender para definir um fechamento:
Ex:
#Defining Funções aninhadasSaída:
No exemplo acima, o greet_msg é a função externa. Isso cria uma função interna (greet_msg está fechando aqui) e é devolvido.
A função externa Greet_msg retorna uma função print_msg e é atribuído à variável Call_fun. Aqui vemos a função externa terminando sua execução, mas ainda podemos acessar a variável msg.
Como modificar a variável dentro do fechamento:
Usando palavras -chave não -locais, podemos modificar a variável dentro da função interna.
Ex: Sem usar palavra -chave não -local. Aqui estamos tentando modificar a variável num dentro do fechamento e obtivemos o não -contrato que o python pensa em num como uma variável local e num não é definido dentro de diversão ().
DEFGENERATE_NUM ():Saída:
Ex: Com o uso não -local palavra -chave. No exemplo abaixo, usando palavras -chave não -locais, poderemos modificar a variável num.
DEFGENERATE_NUM ():Saída:
Vamos escrever mais exemplo usando um fechamento:
Ex: Isso imprimirá argumentos passados e nome da função
defouter (func):Saída:
Ex: No exemplo abaixo, cada vez que o fechamento é chamado, os valores serão anexados a uma lista e adicionará todos os valores na lista e retornará um valor.
defaddition ():Saída:
Ex: Neste exemplo, multiplique o número do parâmetro da função interna pelo parâmetro de função externa
def multiply_by_number (m):
Saída:
Conclusão:
O fechamento do Python é uma função aninhada. Com isso, podemos evitar o uso de variáveis globais usando variáveis não locais. Isso fornece alguns dados que ocultam e compreendendo esse conceito útil na construção de um decorador Python.