__init__ as a lambda

Stefan Schwarzer sschwarzer at sschwarzer.net
Wed Aug 4 18:36:46 EDT 2010


Hi Eric,

On 2010-08-04 21:58, Eric J. Van der Velden wrote:
> class C:
>  def __init__(self,name):self.name=name
> 
> I was wondering if I could make the __init__ a lambda function, but
> 
> class C:
>  __init__=lambda self,self.name:None
> 
> and then later,
> 
> C('Hello')
> 
> does not work; the first argument, self, is assigned all rigth, but
> you cannot write the second argument with a dot,  self.name .

The "problem" is that in a lambda function the part after
the colon has to be an expression. However, you have used
an assignment there which isn't an expression in Python but
a statement.

For example, you can use

f = lambda x: sys.stdout.write(str(x))

(sys.stdout.write(str(x)) is an expression)

but not

f = lambda x: print x

(print x  is a statement in Python versions < 3)

Stefan



More information about the Python-list mailing list