Las lambdas de una comprensión de la lista están devolviendo una lambda cuando se llama

Estoy tratando de iterar la función lambda sobre una lista como entest.py, y quiero obtener el resultado de la llamada de lambda, no el objeto de función en sí. Sin embargo, el siguiente resultado realmente me confundió.

------test.py---------
#!/bin/env python
#coding: utf-8

a = [lambda: i for i in range(5)]
for i in a:
    print i()

--------output---------
<function <lambda> at 0x7f489e542e60>
<function <lambda> at 0x7f489e542ed8>
<function <lambda> at 0x7f489e542f50>
<function <lambda> at 0x7f489e54a050>
<function <lambda> at 0x7f489e54a0c8>

Modifiqué el nombre de la variable al imprimir el resultado de la llamada at como sigue, y todo va bien. Me pregunto de qué se trata todo eso. ?

--------test.py(update)--------
a = [lambda: i for i in range(5)]
for t in a:
    print t()

-----------output-------------
4
4
4
4
4

Respuestas a la pregunta(3)

Su respuesta a la pregunta