"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como capturar variáveis ​​corretamente em funções Lambda em loops?

Como capturar variáveis ​​corretamente em funções Lambda em loops?

Publicado em 2024-11-07
Navegar:540

How to Properly Capture Variables in Lambda Functions in Loops?

Capturando variáveis ​​em funções Lambda

Ao usar funções lambda em um loop, é importante entender seu escopo de variáveis. Ao contrário das funções regulares que copiam variáveis ​​locais, as funções lambda fazem referência a elas.

Considere o código fornecido:

for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))

Aqui, a função lambda captura o valor de m do escopo envolvente. Porém, após o término do loop, m mantém o último valor ('mi'). Quando cada função lambda é chamada, ela faz referência a essa variável m compartilhada, resultando na saída "mi" várias vezes.

Para superar esse problema e garantir que cada lambda capture um valor distinto de m, use uma técnica chamada " argumentos padrão":

for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))

Ao tornar m um parâmetro padrão com o mesmo nome, cada lambda captura sua própria instância da variável, garantindo a saída esperada:

"do"
"é"
"mi"

Declaração de lançamento Este artigo foi reimpresso em: 1729329734 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3