Thanks, that's exactly what I needed. Andrea Griffini wrote: > [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