[EMAIL PROTECTED] wrote: > The following code: > > def functions(): > l=list() > for i in range(5): > def inner(): > return i > l.append(inner) > return l > > > print [f() for f in functions()] > > > returns [4,4,4,4,4], rather than the hoped for [0,1,2,3,4]. I presume > this is something to do with the variable i getting re-bound every time > we go through the loop, or something, but I'm not sure how to fix this.
The problem is that "i" inside the function is indeed the same variable for all the functions (the one you're using for looping). If you want a different variable for each function you can use the somewhat ugly but idiomatic def functions(): l=list() for i in range(5): def inner(i=i): return i l.append(inner) return l this way every function will have its own "i" variable, that is initialized with the value of the loop variable when executing the "def" statement. Andrea -- http://mail.python.org/mailman/listinfo/python-list