On Thu, 06 Oct 2005 16:18:15 -0400, Joshua Ginsberg <[EMAIL PROTECTED]> wrote: >So this part makes total sense to me: > >>>> d = {} >>>> for x in [1,2,3]: >... d[x] = lambda y: y*x >... >>>> d[1](3) >9 > >Because x in the lambda definition isn't evaluated until the lambda is >executed, at which point x is 3. > >Is there a way to specifically hard code into that lambda definition the >contemporary value of an external variable? In other words, is there a >way to rewrite the line "d[x] = lambda y: y*x" so that it is always the >case that d[1](3) = 3?
There are several ways, but this one involves the least additional typing: >>> d = {} >>> for x in 1, 2, 3: ... d[x] = lambda y, x=x: y * x ... >>> d[1](3) 3 Who needs closures, anyway? :) Jp -- http://mail.python.org/mailman/listinfo/python-list