Thanks Tino: your solutions without the lambda work nicely. What I still don't understand is why the print does not execute the lambda and prints the result, instead of printing the lambda's object description. Bye, Ron.
-----Original Message----- From: Tino Wildenhain [mailto:t...@wildenhain.de] Sent: Tuesday, January 20, 2009 14:22 To: Barak, Ron Cc: python-list@python.org Subject: Re: How to print lambda result ? Hi, Barak, Ron wrote: > Hi, > > Wanting to print the correct plural after numbers, I did the following: > > for num in range(1,4): > string_ = "%d event%s" % (num,lambda num: num > 1 and "s" or "") > print string_ > > However, instead of getting the expected output: > > 1 event > 2 events > 3 events > > I get: > > 1 event<function <lambda> at 0x00AFE670> > 2 event<function <lambda> at 0x00AFE670> > 3 event<function <lambda> at 0x00AFE6B0> lambda creates a function so this is the result you are seeing. You would need to call the function to get your result. (num,(lambda n: n >1 and "s" or "")(num)) which is just a quite useless application of lambda :-) (num,num >1 and "s" or "") or even (num,"s" if num >1 else "") in python > 2.5 or in python <3.0: (num,"s"*(num >1)) :-) HTH Tino -- http://mail.python.org/mailman/listinfo/python-list