过去,我在同一个文件中编写了所有函数的python代码,我可以使用以下代码来评测我的程序:
这是我写的一个装饰师:
def do_profile(cond):
def resdec(f):
if not cond:
return f
return profile(f)
return resdec
我就是这样使用它的:
^{pr2}$然后在脚本上调用kernprof.py
:
kernprof.py -l my_program.py
在此期间,我对OOP更加熟悉,我把我的程序重写成许多类,程序现在是这样启动的:
if __name__ == "__main__":
my_app = myApp()
my_app.run()
myApp
是一个与其他类通信频繁的类:
class myApp():
@do_profile(DO_PROFILE)
def foo_method(self, arg1):
pass
我在每个myApp
方法前面添加了do_profile
修饰符,但是如果我运行kernprof.py
,得到的{
那么,分析类的方法的最简单方法是什么?我真的很想用一个装饰工和一个旗子来打开/关闭这个。在
EDIT1:我对这里最简单的解决方案很感兴趣。找一个装修师是一个优雅的解决方案,但也许事情可以做得更容易。我不想使用类似cProfile's
profileprofile.runctx('self.baz()', globals(), locals())
之类的东西。在处理许多类和方法时,这不是一个实用的解决方案。在
profile
函数本身就是一个装饰器,与大多数装饰器一样,它们只需要应用于函数。在幸运的是,类方法基本上是在创建实例时绑定到实例的函数。因此,您可以将decorator应用于任何类方法,方法是将其放入类定义中:
如果使用Python2.6或更高版本,还可以创建一个class decorator并将
^{pr2}$profile
修饰符应用于任何给定类的所有方法。您可以通过将decorator放在类定义之前来应用它:这样的装饰师可能看起来像这样:
此修饰符只将
profile
包装应用于直接方法,而不是从基类继承的任何方法。在看看Yappi
要分析一段代码,只需使用:
相关问题 更多 >
编程相关推荐