Alan Gauld wrote: > On 14/12/13 04:19, Steven D'Aprano wrote: > >> Lambda is just syntactic sugar for a function. It is exactly the same as >> a def function, except with two limitations: >> >> - there is no name, or to be precise, the name of all lambda functions >> is the same, "<lambda>"; > > Sorry, I don't think that is precise. lambda is not the name of the > function. You can't use lambda to access the function(s) or treat it > like any other kind of name in Python. In fact if you try to use it as a > name you'll likely get a syntax error. > > lambda is the key word that defines the function. But its no more > the name of the function than def is.
There is the (variable) name the function object is bound to and the function's __name__ attribute. In the example below "<lambda>" is the __name__ while the function object is bound to the name "f": >>> f = lambda x: math.sqrt(x) + f(x-1) >>> f.__name__ '<lambda>' >>> f(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <lambda> File "<stdin>", line 1, in <lambda> File "<stdin>", line 1, in <lambda> File "<stdin>", line 1, in <lambda> File "<stdin>", line 1, in <lambda> File "<stdin>", line 1, in <lambda> File "<stdin>", line 1, in <lambda> ValueError: math domain error When the normal way to define a function object is used both __name__ attribute and variable name are identical (at least initially): >>> def f(x): return math.sqrt(x) + f(x-1) ... >>> f.__name__ 'f' >>> f(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in f File "<stdin>", line 1, in f File "<stdin>", line 1, in f File "<stdin>", line 1, in f ValueError: math domain error _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor