Counting the number of call of a function

MRAB python at mrabarnett.plus.com
Thu Sep 29 13:26:18 EDT 2011


On 29/09/2011 18:08, Laurent Claessens wrote:
> Hello
>
>
> Is it possible to count the number of time a function is called ?
> Of course, if I've access to the source code, it's easy.
>
> I tried the following :
>
> def foo():
> print "foo !"
>
>
> class wraper(object):
> def __init__(self,fun):
> globals()[fun]=self.replacement
> def replacement(*args):
> print "I'm replaced"
>
> foo()
> X=wraper(foo)
> foo()
>
> I was hoping that globals()[foo] would be replaced by my X.replacement
> and thus the second call to foo() was expected to print "I'm replaced".
>
> Instead nothing is done.
>
> By the way, I tried to print globals() inside __init__() to see what
> happens. It turns out that the entry 'foo' is never modified.
>
> Any idea ?
> I fact what I have to do is to add a decorator _a posteriori_ ...
>
The keys of globals() are the _names_. You're giving it the function
itself.

Try this:

class wraper(object):
     def __init__(self,fun):
         globals()[fun.__name__]=self.replacement
     def replacement(*args):
         print("I'm replaced")

A decorator would be better.



More information about the Python-list mailing list