[Tutor] Are you allowed to shoot camels? [kinda OT]

Jeff Shannon jeff at ccvcorp.com
Thu Feb 3 22:59:38 CET 2005


Max Noel wrote:

> On Feb 3, 2005, at 09:48, Alan Gauld wrote:
> 
>> Pythons lambda feature is a bare minimum (and Guido wants to remove
>> it!).
> 
>     Does he? Damn, just when I was learning functional programming! (in 
> Haskell, if you're curious ^^)


However, Python doesn't need lambdas to be able to write in a 
functional style.  Functions are first-class objects and can be passed 
around quite easily, and IIRC Python's list comprehensions were 
borrowed (though probably with notable modification) from Haskell.

Keep in mind that both lambdas and named functions are created at 
runtime, so the creation of both is fully dynamic.  Indeed, there are 
only a few differences between lambdas and named functions in Python:

   - Anonymous vs named
   - Single expression vs suite of statements
   - Inline vs. pre-created

Note that the second of these is a consequence of the third -- given 
Python's block-indentation-based structure, there's no good way to 
inline a multi-statement suite (how many of those statements belong to 
that 'if' suite?).  Statements need to have a clear indentation level, 
and while one can sometimes fudge that for a single statement, it gets 
exponentially messier as the number of statements goes up.

I'd also argue that the inline nature is the *true* differentiating 
feature of lambdas -- the fact that they're anonymous is relatively 
minor.  Consider, also, that if they weren't inline then you'd need a 
name to refer to them by... and at that point, you *have* a 'normal' 
function.

So, while there are some advantages to having single-use callables be 
defined inline (i.e. lambdas), their removal from Python (which 
wouldn't happen before the mythical Python 3k anyhow) isn't likely to 
be as devastating as some might lead you to believe. ;)  It certainly 
won't prevent you from using Python for functional programming...

(And personally, I suspect that if lambdas *are* removed, they will be 
replaced with a different construct that will fill the same needs in a 
more Pythonic way...)

Jeff Shannon
Technician/Programmer
Credit International




More information about the Tutor mailing list