Closure e funções que retornam outras funções
Uma closure em Python é uma função que mantém a referência a uma ou mais variáveis definidas em um escopo externo, mesmo após a conclusão desse escopo. Basicamente, ela “captura” o ambiente de uma função externa e retém o acesso a essas variáveis, permitindo que a função interna seja executada com base nos valores dessas variáveis, mesmo quando a função externa já terminou sua execução.
Aqui estão os principais pontos para entender closures:
-
Criação de Closure: Uma closure é criada quando uma função interna faz referência a variáveis de uma função externa e essa função interna é retornada como resultado da função externa.
-
Ligação de Variáveis: As variáveis que a função interna referencia são chamadas de “variáveis capturadas”. A função interna retém a ligação (referência) a essas variáveis, mesmo que a função externa já tenha terminado de ser executada.
-
Uso Flexível: Closures permitem criar funções especializadas ou personalizadas que podem ser reutilizadas com diferentes contextos, graças à “lembrança” das variáveis do ambiente em que foram criadas.
-
Exemplo:
def criar_saudacao(saudacao): def saudar(nome): return f"{saudacao}, {nome}!" return saudar falar_bom_dia = criar_saudacao("Bom dia") falar_boa_noite = criar_saudacao("Boa noite") print(falar_bom_dia("Luiz")) # Bom dia, Luiz! print(falar_boa_noite("Luiz")) # Boa noite, Luiz!
No exemplo acima, a função criar_saudacao
retorna a função interna saudar
, que captura a variável saudacao
definida no escopo da função externa. Quando as funções falar_bom_dia
e falar_boa_noite
são chamadas, elas mantêm a referência à variável saudacao
por meio da closure, permitindo que elas construam as saudações corretas. Isso ilustra como closures podem ser usadas para criar funções personalizadas e reutilizáveis com base em diferentes contextos.