Question on lambdas
Terry Reedy
tjreedy at udel.edu
Mon Dec 8 21:09:41 EST 2014
On 12/8/2014 8:53 PM, Chris Angelico wrote:
> On Tue, Dec 9, 2014 at 12:44 PM, Christoph Becker <cmbecker69 at 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
More information about the Python-list
mailing list