Ah, okay. Now it's clear. Thanks Tino. Ron. -----Original Message----- From: Tino Wildenhain [mailto:t...@wildenhain.de] Sent: Tuesday, January 20, 2009 14:45 To: Barak, Ron Cc: python-list@python.org Subject: Re: How to print lambda result ?
Barak, Ron wrote: > 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. Well its up to the implemention what a class is supposed to return when its __str__() is called. Default is what you see. (this is actually __str__() returning __repr__() which is at its default) Regards Tino > > -----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