[Python-ideas] Access to function objects

ron3200 ron3200 at gmail.com
Tue Aug 9 19:46:58 CEST 2011


On Sun, 2011-08-07 at 22:14 +1000, Nick Coghlan wrote:
> On Sun, Aug 7, 2011 at 4:17 PM, Terry Reedy <tjreedy at udel.edu> wrote:
> > On 8/7/2011 12:32 AM, Eric Snow wrote:
> >> Of the three code blocks, functions are the only ones for whom the
> >> resulting object and the execution of the code block are separate.  So
> >> a code object could be executing for the original function or a
> >> different one that is sharing the code object.
> >
> > Now I remember that the separation between code object and function object
> > and the possibility of reusing code objects has been given as a reason to
> > reject the idea. On the other hand, reusing code objects is so rare that I
> > question the need to cater to it much.
> 
> Nested function objects and class definitions say 'Hi!' - they reuse
> code blocks all the time. In the following code:
> 
> def decorator(f):
>     @wraps(f)
>     def wrapper(*args, **kwds):
>         return f(*args, **kwds)
>     return wrapper
> 
> All of the 'wrapper' instances share a single code object (stored as a
> constant in the code object for 'decorator').
> 
> If a proposal suggests storing mutable state on a code object it's
> time to stop and think of a new way (or drop the idea entirely).

It seems to me, many of the attempts to improve functions involve making
them more like objects.

Since functions are a key building block of class's,  I'd rather see
functions simplified rather than made more complex.  Which probably
isn't possible at this time.


As for a new way/direction ...

Maybe a simplified function as a method may be possible?  With that, it
then becomes possible to have a Function class that people can alter by
adding additional methods to.

Then  "def foo(): pass" could possibly be short for ...

class f(Function):
    method __call__(self):  #can this be more efficient over def?
        pass
foo = f()


Yes, functions are objects now, but modifying them is almost always
hackish.  Maybe moving in this direction can lead to some non-hackish
alternatives for those use cases.

Cheers,
   Ron





More information about the Python-ideas mailing list