Beorn wrote: > Consider this example: > > >>> def funcs(x): > ... for i in range(5): > ... def g(): return x + i > ... yield g > > I would expect the value of x used in g to be that at the function > declaration time, as if you've pass g a (x=x) argument, especially > after reading this post: http://lua-users.org/wiki/LuaScopingDiscussion > > But: > > >>> [ fun() for fun in list(funcs(1)) ] > [5, 5, 5, 5, 5] > > Whereas: > > >>> [ fun() for fun in funcs(1) ] > [1, 2, 3, 4, 5] > > This came up while discussing Python pain points at > http://intertwingly.net/blog/2007/06/04/Python-Pain-Points#c1181602242 > > I can see how it works now, but I haven't found an easy-to-read > documentation on this. > > I guess it's debatable if perhaps every i used in the loop shouldn't > be a different i. It had me fooled, anyways. > > Rgds, > Bjorn >
If this isn't classified as a bug, then someone has some serious explaining to do. Why would it be desirable for a generator to behave differently in two different contexts. Should I import this to see how many principles this behavior violates? James -- http://mail.python.org/mailman/listinfo/python-list