On Mon, 28 Nov 2011 12:32:59 -0700, Ian Kelly wrote: > On Sun, Nov 27, 2011 at 4:55 PM, Steven D'Aprano > <steve+comp.lang.pyt...@pearwood.info> wrote: [...] >>> Lambdas and functions are the same thing in my language, so no need >>> for a special keyword. >> >> That does not follow. Lambdas and def functions are the same thing in >> Python, but Python requires a special keyword. > > I think the implication is that Unit has only one syntax for creating > functions, which is lambda-style. In any case, why does Python require > a special keyword? def is only used in a statement context, and lambda > is only used in an expression context. Why not use the same keyword for > both?
Because the syntax is completely different. One is a statement, and stands alone, the other is an expression. Even putting aside the fact that lambda's body is an expression, and a def's body is a block, def also requires a name. Using the same keyword for both would require special case reasoning: sometimes def is followed by a name, sometimes without a name. That's ugly. def name(args): block # okay funcs = [def args: expr, # okay so far def name(args): expr, # not okay def: expr, # okay ] def: expr # also okay def: expr expr # but not okay x = def x: expr # okay x = def x(x): expr # not okay Using the same keyword for named and unnamed functions is, in my opinion, one of those foolish consistencies we are warned about. When deciding on syntax, the difference between anonymous and named functions are more significant than their similarities. > I think the answer is historical: def came first, and when > anonymous functions were added it didn't make sense to use the keyword > "def" for them, because "def" implies a name being defined. That reasoning still applies even if they were added simultaneously. Lambda is pretty old: it certainly exists in Python 1.5 and almost certainly in 1.4. While it doesn't exist as a keyword in Python 0.9.1, there is a module called "lambda" with a function "lambda" that uses more or less the same syntax. Instead of lambda x: x+1, you would instead write lambda("x", "x+1"). So the idea of including anonymous functions was around in Python circles before the syntax was locked in. -- Steven -- http://mail.python.org/mailman/listinfo/python-list