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"
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