Funktionen in einer Schleife erstellen

Ich versuche, Funktionen innerhalb einer Schleife zu erstellen:

functions = []

for i in range(3):
    def f():
        return i

    functions.append(f)

Das Problem ist, dass am Ende alle Funktionen gleich sind. Anstatt 0, 1 und 2 zurückzugeben, geben alle drei Funktionen 2 zurück:

print([f() for f in functions])
# expected output: [0, 1, 2]
# actual output:   [2, 2, 2]

Warum geschieht dies, und was kann ich tun, um drei verschiedene Funktionen zu erhalten, die jeweils 0, 1 und 2 ausgeben?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage