getting the current function
Arnaud Delobelle
arnodel at googlemail.com
Fri Sep 7 13:36:35 EDT 2007
On Sep 7, 5:19 pm, Gary Robinson <gary... at mac.com> wrote:
> > This all seems a bit too complicated. Are you sure you want to do
> > this? Maybe you need to step back and rethink your problem.
>
> In version 2.1 Python added the ability to add function attributes -- seehttp://www.python.org/dev/peps/pep-0232/for the justifications. A counter probably isn't one of them, I just used that as a quick example of using thisfunc().
>
> I've just never liked the fact that you have to name the function when accessing those attributes from within the function. And I thought there might be other uses for something like thisfunc().
>
You can do this without fiddling with stack frames:
def bindfunction(f):
def bound_f(*args, **kwargs):
return f(bound_f, *args, **kwargs)
bound_f.__name__ = f.__name__
return bound_f
# Use like this:
@bindfunction
def factorial(this_function, n):
if n > 0:
return n * this_function(n - 1)
else:
return 1
# Interactively:
>>> factorial(5)
120
>>> fac = factorial
>>> factorial = "spam"
>>> fac(8)
40320
>>>
--
Arnaud
More information about the Python-list
mailing list