[Python-Dev] Let's send lambda to the shearing shed (Re: Let's just keep lambda) (original) (raw)
Bengt Richter bokr at oz.net
Thu Feb 9 21:53:39 CET 2006
- Previous message: [Python-Dev] Let's send lambda to the shearing shed (Re: Let's just *keep* lambda)
- Next message: [Python-Dev] Let's send lambda to the shearing shed (Re: Let's just *keep* lambda)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Thu, 09 Feb 2006 16:41:10 +1300, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
My thought on lambda at the moment is that it's too VERBOSE.
If a syntax for anonymous functions is to pull its weight, it needs to be very concise. The only time I ever consider writing a function definition in-line is when the body is extremely short, otherwise it's clearer to use a def instead. Given that, I do not have the space to waste with 6 or 7 characters of geeky noise-word. OTOH, it does stand out as a flag to indicate what is being done.
So my vote for Py3k is to either 1) Replace lambda args: value with args -> value or something equivalently concise, or Yet another bike shed color chip:
!(args:expr) # <==> lambda args:expr
and !(args::suite) # <==> (lambda args::suite)
(where the latter lambda form requires outer enclosing parens) But either "::" form allows full def suite, with indentation for multilines having left edge of single indent defined by first line following the "::"-containing line, and explicit returns for values required and top suite ending on closing outer paren)
Probable uses for the "::" form would be for short inline suite definitions !(x::print x) # <==> (lambda x::print x) & etc. similarly !(::global_counter+=1;return global_counter) !(::raise StopIteration)() # more honest than iter([]).next()
but the flexibility would be there for an in-context definition, e.g.,
sorted(seq, key= !(x::
try: return abs(x)
except TypeError: return 0))
and closures could be spelled
!(c0,c1:!(x:c0+c1*x))(3,5) # single use with constants is silly spelling of !(x:3+5*x)
Hm, are the latter two really better for eliminating "lambda"? Cf:
sorted(seq, key=(lambda x::
try:return abs(x)
except TypeError: return 0))
and (lambda c1,c2:lambda x:c0+c1*x)(3,5) # also silly with constants
I'm not sure. I think I kind of like lambda args:expr and (lambda args::suite) but sometimes super-concise is nice ;-)
2) Remove lambda entirely. -1
Regards, Bengt Richter
- Previous message: [Python-Dev] Let's send lambda to the shearing shed (Re: Let's just *keep* lambda)
- Next message: [Python-Dev] Let's send lambda to the shearing shed (Re: Let's just *keep* lambda)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]