On 12/8/2014 8:53 PM, Chris Angelico wrote:
On Tue, Dec 9, 2014 at 12:44 PM, Christoph Becker <[email protected]> wrote:Ben Finney wrote:It's best to remember that ‘lambda’ is syntactic sugar for creating a function; the things it creates are not special in any way, they are normal functions, not “lambdas”.Could you please elaborate why ‘lambda’ does not create “lambdas”. I'm a Python beginner (not new to programming, though), and rather confused about your statement.For the same reason that "def" doesn't create "defs", and "for" doesn't create fors (uhh... the Force?). Both "lambda" and "def" create functions. Functions are things that can be called, and they're created by the "def" statement, the "lambda" expression, and very VERY occasionally, by directly calling the function constructor. You could distinguish between "lambda functions" and "def functions" if you like, but the distinction is almost never significant. In fact, usually you don't even need to distinguish between functions and other callables (types, objects with __call__ methods, bound method objects, etc, etc, etc).
To exemplify Chris's answer: Consider >>> def f1(a, b='hi'): return a+b >>> f2 = lambda a, b='hi': a+b >>> I believe the only difference between any of the attributes of f1 and f2 is >>> f1.__name__ 'f1' >>> f2.__name__ '<lambda>' >>> f1.__code__.co_name 'f1' >>> f2.__code__.co_name '<lambda>'All other values of corresponding attributes of f1 and f2, and f1.__code__ and f2.__code__, should be the same. For instance
>>> f1.__code__.co_varnames
('a', 'b')
>>> f2.__code__.co_varnames
('a', 'b')
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list
