Function attributes
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Wed Feb 10 16:49:40 EST 2010
En Wed, 10 Feb 2010 10:59:41 -0300, Muhammad Alkarouri
<malkarouri at gmail.com> escribió:
> What is the simplest way to access the attributes of a function from
> inside it, other than using its explicit name?
> In a function like f below:
>
> def f(*args):
> f.args = args
> print args
>
> is there any other way?
See this:
>>> def foo(): pass
...
>>> import sys
>>> sys.getrefcount(foo)
2
The 2 means that there is a *single* reference to the function - the foo
name in the global namespace. No other reference exists, there is no
hidden attribute somewhere that you may use. If you want another way to
reach the function, you'll have to add it yourself.
I've written a decorator for "injecting" a __function__ name into the
function namespace, but I can't find it anywhere. I think I implemented
it by adding a fake additional argument and replacing LOAD_GLOBAL with
LOAD_NAME in the bytecode.
> I am guessing the next question will be: should I really care? It just
> feels like there should be a way, but I am not able to verbalise a
> valid one at the moment, sorry.
One reason would be to write truly recursive functions (currently, a
recursive call involves a name lookup, which could potentially return a
different function). Another one, to implement some kind of tail call
optimization.
--
Gabriel Genellina
More information about the Python-list
mailing list