On Sep 7, 5:19 pm, Gary Robinson <[EMAIL PROTECTED]> 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
--
http://mail.python.org/mailman/listinfo/python-list