James Stroud wrote: > 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?
It's no bug. The generator behaves the same way in both cases. What is different is the calling time of the function. Certainly a surprising outcome. But no bug. Diez -- http://mail.python.org/mailman/listinfo/python-list