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