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

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to