lambda in list comprehension acting funny
88888 Dihedral
dihedral88888 at googlemail.com
Sat Jul 14 06:31:12 EDT 2012
Alister於 2012年7月12日星期四UTC+8下午5時44分15秒寫道:
> On Wed, 11 Jul 2012 08:43:11 +0200, Daniel Fetchinson wrote:
>
> >> funcs = [ lambda x: x**i for i in range( 5 ) ]
> >> print funcs[0]( 2 )
> >> print funcs[1]( 2 )
> >> print funcs[2]( 2 )
> >>
> >> This gives me
> >>
> >> 16 16 16
> >>
> >> When I was excepting
> >>
> >> 1
> >> 2
> >> 4
> >>
> >> Does anyone know why?
> >
> > And more importantly, what's the simplest way to achieve the latter? :)
>
> Having read Steve's explanation in the other thread (which I think has
> finally flipped the light switch on lambda for me) it only requires a
> minor change
>
> funcs=[ lambda x,y=i:x**y for i in range(5) ]
>
> although I cant actually think why this construct would be needed in
> practice, how are you actually using it
>
>
> --
> * Simunye is so happy she has her mothers gene's
> <Dellaran> you better give them back before she misses them!
Uhn, there are 5 objects in the list if not factored well to be executed in
the run time.
More information about the Python-list
mailing list