On 12/8/2014 8:53 PM, Chris Angelico wrote:
On Tue, Dec 9, 2014 at 12:44 PM, Christoph Becker <cmbecke...@gmx.de> 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

Reply via email to