Quiz Python – Eclumes e variáveis ​​de loop

Qual é a saída deste código e por que 🤔? def make_counters (): contadores = []
para i no intervalo (3): def contador (): retorno i contadores.append (contador) contadores de retorno a, b, c = make_counters () print (a (), b (), c ()) saídas: a. 0 1 2 b. 2 2 2 c. 0 0 0 d. 1 1 1 e. Aumenta um erro Enter o modo de saída do modo de tela cheia por que esse questionário é importante que esse snippet curto parece simples, mas investiga um conjunto de comportamentos de python que geralmente tentam os alunos e até experimentaram desenvolvedores ao escrever funções ou fábricas de ordem superior. O teste se concentra em três conceitos firmemente relacionados: 1. Fechamentos e captura de variáveis ​​Um fechamento é uma função que se lembra do ambiente em que foi definido. Quando você cria uma função dentro de outra função, essa função interna pode referenciar variáveis ​​do escopo externo. Mas como essas variáveis ​​são referenciadas (e quando são consideradas para cima) é crucial. 2. A ligação tardia de ligação versus ligação precoce Python Pesquisa para variáveis ​​capturadas por fechamentos acontece no horário da chamada (geralmente chamado de “ligação tardia”), não necessariamente no momento em que a função interna é definida. Esse tempo afeta qual valor a função interna retorna quando você chama mais tarde. 3. Variáveis ​​de loop e fábricas de funções Criando funções dentro do loops é um padrão comum (por exemplo, criando uma lista de retornos de chamada). Quando a função interna faz referência à variável Loop, você precisa entender se cada função captura um valor distinto ou a mesma variável que mais tarde muda. Como abordar esse quebra -cabeça (sem estragá -lo) Leia -o lentamente: identifique onde as funções são definidas e onde as variáveis ​​são criadas/modificadas. Pergunte “Quando eu é avaliado?” – na hora da definição ou no tempo da chamada? Considere executar uma simulação mental: imagine o circuito em execução e as funções sendo anexadas – então imagine chamá -las mais tarde. Experimente pequenas experiências se você estiver preso: insira uma impressão dentro do loop ou inspecione os atributos das funções retornadas em um REPL interativo. (Dica: passar por um depurador ou usando DIS também pode revelar a ordem de avaliação.) Aprender o fechamento de compreensão de toca e o momento das pesquisas variáveis ​​o salvará de bugs sutis ao criar fábricas de funções, decoradores, retornos de chamada ou qualquer código que gera funções dinamicamente. Depois que você pode raciocinar sobre onde e quando cada nome é resolvido, padrões como esses se tornam ferramentas poderosas em vez de armadilhas. Escreva sua solução abaixo no comentário ou veja aqui: link Conecte -se comigo 😊 🔗 Links

Fonte

Você pode ter perdido