[Python-ideas] Ruby-style Blocks in Python Idea
tjreedy at udel.edu
Tue Mar 10 21:15:01 CET 2009
Guido van Rossum wrote:
> On Mon, Mar 9, 2009 at 4:09 PM, Terry Reedy <tjreedy at udel.edu> wrote:
>> Like many other Pythonistas I recognize that that an uninformative stock
>> name of '<lambda>' is defective relative to an informative name that points
>> back to readable code. What I dislike is the anonymity-cult claim that the
>> defect is a virtue.
>> Since I routinely use standard names 'f' and 'g' (from math) to name
>> functions whose name I do not care about, I am baffled (and annoyed) by
>> (repeated) claims such as "Having to name a one-off function adds additional
>> cognitive overload to a developer." (Tav). Golly gee, if one cannot decide
>> on standard one-char name, how can he manage the rest of Python?
>> (I also, like others, routinely use 'C' for class and 'c' for C instance.
>> What next? A demand for anonymous classes? Whoops, I just learned that
>> Java has those.)
>> But I have no problem with the use of lambda expressions as a convenience,
>> where appropriate.
> Andrew Koening once gave me a good use case where lambdas are really a
> lot more convenient than named functions. He was initializing a large
> data structure that was used by an interpreter for some language. It
> was a single expression (probably a list of tuples or a dict). Each
> record contained various bits of information (e.g. the operator symbol
> and its precedence and associativity) as well as a function (almost
> always a very simple lambda) that implemented it. Since this table was
> 100s of records long, it would have been pretty inconvenient to first
> have to define 100s of small one-line functions and give them names,
> only to reference them once in the initializer.
Initializing such structures is one of the use cases I intended under
'where appropriate'. Adding more powerful expressions, like
comprehensions (and g.e's) that do not break Python's basic syntactic
model of mixed expressions and indented statements has added to the
> This use case doesn't have a nice equivalent without anonymous
> functions (though I'm sure that if there really was no other way it
> could be done, e.g. using registration=style decorators).
The convenience is from having function expressions. If the expression
syntax allowed the optional attachment of a name, it would be just as
convenient. In some cases, I am sure people would find it even more
convenient if they could add in a name, especially when there is nothing
else in the structure to serve as a substitute.
'Anonymous' is a different concept from 'expression-defined' despite the
tendency to conflate the two.
Terry Jan Reedy
More information about the Python-ideas