Lambdas de uma compreensão de lista estão retornando um lambda quando chamado

Estou tentando iterar a função lambda em uma lista como emtest.py, e quero obter o resultado da chamada do lambda, não o objeto de função em si. No entanto, a seguinte saída realmente me confundiu.

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

Modifiquei o nome da variável ao imprimir o resultado da chamada emt da seguinte forma, e tudo vai bem. Eu estou querendo saber o que é tudo isso. ?

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

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

questionAnswers(3)

yourAnswerToTheQuestion