Comportamento de fechamento estranho em python
Eu tenho um código simples a seguir:
def get():
return [lambda: i for i in [1, 2, 3]]
for f in get():
print(f())
Como esperado do meu conhecimento python, a saída é 3 - a lista inteira conterá o último valor dei
. Mas como isso funciona internamente?
AFAIK, variáveis python são simplesmente referência a objetos, então o primeiro fechamento deve incluir primeiro o objetoi
referência - e este objeto é definitivamente 1, não 3 O_O. Como acontece que o fechamento de python inclui a própria variável em vez de objeto essa referência de variável? Ela salva o nome da variável como texto simples, alguma "referência à variável" ou o quê?