I have the following code:
funcs = []
for i in range(10):
def func():
print i
funcs.append(func)
for f in funcs:
f()
The problem is that func
is being overriden. Ie the output of the code is:
9
9
9
...
How would you solve this without defining new functions?
The optimal solution would be to change the name of the function. Ie:
for i in range(10):
def func+i():
...
(or some other weird syntax)
The problem is not that func is being overwritten, it's that the value of
i
is being evaluated when the function is called, not when it is defined. If you want to evaluatei
at definition time, put it in the function declaration, as a default argument tofunc
.Default arguments are evaluated once, when the function is defined, so the incrementing loop will not affect them. This would work just as well if you used
but I used the name
value
to make it clear which name is being used within the function.Returning
func
from another function is safest.You could try