[Tutor] Question about profile.run() and decorators
Kent Johnson
kent37 at tds.net
Tue Feb 27 04:25:58 CET 2007
Thane.Frivold at nokia.com wrote:
> Is there a way to construct a string version (suitable to pass
> into profile.run()) from what is available inside a decorator function?
> I realize that what I am trying to do could probably be done otherwise,
> but this arose out of questions and problems possed in a Python class I
> just completed, and I am still trying to find my way around the
> language. My 'best' attempt is shown below.
Take a look at profile.Profile.runcall() (look at the source for
profile, it is not in the docs). This function takes an actual function
object as its parameter rather than a string describing the function call.
Kent
>
> Also, I have limited myself to a function with only 1 parameter,
> but it seems to get even worse if you have 2 or more arguments, since
> repr() takes only a single argument.
>
> BTW, I am using ActiveState Python 2.4.3 on Windows XP.
>
> Any and all suggestions or solutions welcomed.
>
> Thank you.
>
> Cheers,
>
> - Thane
>
> =-=-=
>
> import profile
>
> def myProfileDecorator(function):
> def newFunction(obj, *args):
> # This attempt does not seem to give an object expression that can
> be used
> #expression = function.__name__ + '(' + repr(obj) + ',' +
> repr(*args) + ')'
>
> # This attempt generates a NameError exception
> expression = function.__name__ + '(' + repr(*args) + ')'
>
> print 'About to call: profile.run(', expression, ')'
> profile.run(expression)
> return newFunction
>
> import random
>
> class Foo:
> @myProfileDecorator
> def results(x):
> print str(x) + " Done"
>
> x = Foo()
>
> print x.results("Almost")
>
> =-=-=
>
>
>
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
More information about the Tutor
mailing list