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