The future of Python immutability

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Mon Sep 7 00:27:01 EDT 2009


On Sun, 06 Sep 2009 06:18:23 -0700, Adam Skutt wrote:

> On Sep 5, 7:38 pm, Steven D'Aprano <st... at REMOVE-
>> No. Lambdas are a *syntactical construct*, not an object. You wouldn't
>> talk about "while objects" and "if objects" and "comment objects"
>> *because they're not objects*.
> This rhetoric precludes functions objects as well and is entirely non-
> compelling.

Functions ARE objects in Python. They even inherit from object:

>>> def f():
...     return None
...
>>> isinstance(f, object)
True


Just because there is syntax for creating functions (at least two 
different syntax forms actually) doesn't "preclude function objects". 
There is syntax for dicts, and dict objects; syntax for lists, and list 
objects; syntax for strings, and string objects. But there's syntax for 
while loops, and no such thing as a while object.

Lambda expressions are syntax for creating function objects. That's all 
there is to it, end of story.


>> Functions created with def and functions created with lambda are
>> *precisely* the same type of object.
> Which means you have lambda objects.  The fact they're same as any other
> function is irrelevant and not especially interesting.

They're *function* objects, not "lambda" objects:

>>> type(lambda: None)
<type 'function'>




>> There is no such thing as a "lambda
>> object" which is a "special case" of ordinary functions, there are just
>> functions.
> Hey, I was just trying to resolve tjr's view, he seemed to think that
> .__name__ is different is pretty important, and he's the one you should
> take your objections up with, not me.

Nice try but no. It was YOU, not Terry, claiming that lambda's are a 
special kind of object different from ordinary functions.



-- 
Steve



More information about the Python-list mailing list