Criando funções em um loop
Estou tentando criar funções dentro de um loop:
functions = []
for i in range(3):
def f():
return i
functions.append(f)
O problema é que todas as funções acabam sendo as mesmas. Em vez de retornar 0, 1 e 2, todas as três funções retornam 2:
print([f() for f in functions])
# expected output: [0, 1, 2]
# actual output: [2, 2, 2]
Por que isso está acontecendo e o que devo fazer para obter três funções diferentes que produzem 0, 1 e 2, respectivamente?