Re: Python had a little lambda ...

Steven D. Majewski (sdm7g@elvis.med.virginia.edu)
Wed, 23 Feb 1994 22:35:21 -0500

On Feb 23, 21:49, Bennett Todd wrote:

>
> Can this lambda support multi-line expressions? If not, is there any hope of
> getting one that can?
>

The problem with multi-line lambda's in Python is:
How do you embed one in a function using INDENT/DEDENT syntax ?

( And remember my complaints about not being able to do:
"for x in seq : if f(x) : do_something" all on one line. )

There would need to be a explicit printable symbol for the INDEDENT/DEDENT
tokens. This might not be a bad idea, but I haven't thought it
through.

Python's lambda is really just for the one-liners - to avoid the
annoyance of having to define a function just to increment:
new_sequence = map( lambda x: x+1, sequence )

I think the scoping problem that my previous post uncovered is
much MORE of a "killer" problem: It really makes lambda pretty
useless except from the top level __main__ scope.

>
> The one thing I've found that TCL is __REALLY__ good at, that no other
> language I've found matches, is extensions that have lots of callbacks.
> TCL's syntax exposes the view that an extension like expect, or the widgets
> of Tk, are nonlinear flow-of-control constructs.
>
> If Python had multi-line function call argument lists, where the arguments
> could be multi-line lambdas, I think it would achieve the same clarity. I
> think.
>

It's not clear to my how those callbacks are connected to lambda -
unless you just mean the convenience of writing them ( for example,
you don't have to def a print function for ftplib.retrlines() callback
since you can now use 'lambda s : print str' to turn the statement
print into a print function. )

You can still define a function and use it as a callback.
Is there some requirement for it to be anonymous that I don't
understand ?

[ There are things in can complain about in BOTH Python's syntax AND
semantics - maybe I'm misreading you in connecting the two here?
Maybe "Dylan" will end up being not only a "better lisp", but a
"better Python" ... but I'm not going to hold my breath waiting
for an implementation! ]

Python CAN have multi-line function call argument lists -
this works:

>>> def f( a, b, c, d, e,
... g ):
... return a+b+c+d+e+g
...
>>> f( 1,2,3,4,5,6 )
21
>>> f( 1,2,
... 2,4,
... 5,6 )
20
>>>

and even:

>>> def g( a, # comment
... b, # comment
... c # comment
... ):
... return a+b+c
...
>>>

They are also some kludges to make a def-ed function
semi-anonymous, but if you're after clarity, they are not
going to help you.

- Steve Majewski (804-982-0831) <sdm7g@Virginia.EDU>
- UVA Department of Molecular Physiology and Biological Physics