Steven D'Aprano wrote:
Lambdas are single-line (technically, single-statement) anonymous functions,
Lambdas are function-defining expressions used *within* statements that give the resulting function object a stock .__name__ of '<lambda>'. The syntax could have been augmented to include a real name, so the stock-name anonymity is a side-effect of the chosen syntax. Possibilities include lambda name(args): expression lambda <name> args: expression The latter, assuming it is LL(1) parse-able, would even be compatible with existing code and could still be added. Contrarywise, function-defining def statements could have been allowed to omit the name. To be useful, the object (with a .__name__ such as '<def>', would have to get a default namespace binding such as to '_', even in batch mode.
caller(lambda args: statement)
Change 'statement' to 'expression'.
A multi-line lambda (technically, multi-statement)
The problem is that 'multi-statement expression' is an oxymoron in Pythonland.
would also be an anonymous function.
Not necessarily, and irrelevant to the essence of lambda expressions, which is that they are expressions that can be used within statements. Terry Jan Reedy