Lambdas aus einem Listenverständnis geben beim Aufruf von @ ein Lambda zurü

Ich versuche, die Lambda-Funktion über eine Liste wie in @ zu iterieretest.py, und ich möchte das Aufrufergebnis des Lambda erhalten, nicht das Funktionsobjekt selbst. Die folgende Ausgabe hat mich jedoch wirklich verwirrt.

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

Ich habe den Variablennamen geändert, als das Anrufergebnis auf @ gedruckt wurdt wie folgt, und alles geht gut. Ich frage mich, was das alles ist. ?

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

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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage