Has anyone else ever thought that it might be useful to access a function object from within the call?  I've come across this situation a few times recently, and thought it would be very useful to be able to do something like, for example:

def a_function() as func:
    print(func.__doc__)

It would be useful, for example, to record state between calls, or if the function wants to reuse its own properties (like in the above example).  Consider a function which should print the number of times it has been called on every call

def counter(add) as func:
    if not hasattr(func, 'count'):
        func.count = 0
    func.count += 1
    print(func.count)

This could also be implemented using classes, i.e.

class Counter:
    def __call__(self, add):
        if not hasattr(func, 'count'):
            func.count = 0
        func.count += 1
        print(func.count)
counter = Counter()

But this is much more clumsy, results in an extra object (the Counter class) and will be quite complicated if counter is a method rather than a function.

The reason I've used "as" syntax is that it is consistent with other python statements (e.g. "with" and "except"), wouldn't require a new keyword and is backwardly compatible.

Any thoughts?

David