Multiline lamba implementation in python.

George Sakkis george.sakkis at gmail.com
Tue Jun 12 14:17:56 EDT 2007


On Jun 12, 11:36 am, Kay Schluehr <kay.schlu... at gmx.net> wrote:
> On 12 Jun., 16:54, George Sakkis <george.sak... at gmail.com> wrote:
>
>
>
> > On Jun 12, 10:12 am, Kay Schluehr <kay.schlu... at gmx.net> wrote:
>
> > > On 12 Jun., 14:57, Facundo Batista <facu... at taniquetil.com.ar> wrote:
>
> > > > Remember that the *only* difference between the two functions is that
> > > > one is anonymous, and for other you have to came up with a name (name
> > > > that if is well thought, actually adds readibility to your code).
>
> > > The difference is that one can be inlined since it is an expression
> > > and the other has to be a statement and a reusable ( named )
> > > abstraction even when you don't need one. I have a very hard time to
> > > defend this as a good design decision even when it is just a minor
> > > pain point in almost all my practical purposes.
>
> > I think of it more as a "necessary evil" rather than a conscious
> > design choice. IIRC the "official" justification is that nobody came
> > up with an acceptable syntax for multiline lambdas;
>
> Translating this into unofficial language: Guido just didn't care a
> lot about lambda and found no one of the alternative proposals
> compelling. If he's actually interested in a language feature he fixes
> syntax quite fast.
>
> > TOOWTDI is a
> > secondary reason (as one can easily come up with a dozen TOOWTDI
> > violations in other parts of the language). I agree though that in
> > practice it's a very small limitation.
>
> > George
>
> But in the case we are discussing here it is really not obvious.
> That's why the community as well as the public opinion when discussing
> Python returns to the topic every once in a while. We agree about this
> issue being a minor limitation but I'd vote nevertheless +1 for either
> removing lambda or liberating it from the restriction of containing an
> expressions only.

Here we disagree; I prefer the crippled* lambda that covers the
majority of my needs for inlined functions anyway than the purist all-
or-nothing approach. YMMV.

George


* Actually you can get far if you're willing to abuse it, e.g.:

foo = lambda self,x: setattr(self,'x',x) or x+1

instead of

def foo(self, x):
    self.x = x
    return x+1





More information about the Python-list mailing list