让我们说我有一些代码可以无限运行这样的函数:
def funct():
print "Hello"
while True:
funct()
有没有办法我可以测试调用该函数的次数(没有使用尝试和除了 >递归错误)然后执行更多代码?
答案 0 :(得分:3)
定义函数的函数属性,并在每次调用时对其进行碰撞。
def funct():
funct.callCount += 1
print "Hello"
funct.callCount = 0
答案 1 :(得分:1)
稍微详细的方法是使用自定义装饰器来注册函数调用。
在下面的示例中,创建了一个Counter
类,其中包含一个类属性字典,其中包含有关每个函数调用频率的信息
class Counter(object):
counts = {}
@staticmethod
def count(func):
def wrapped(*args,**kwargs):
if func.__name__ in Counter.counts.keys():
Counter.counts[func.__name__] += 1
else:
Counter.counts[func.__name__] = 1
return func(*args,**kwargs)
return wrapped
@Counter.count
def test():
pass
@Counter.count
def test2():
test()
@Counter.count
def test3():
test()
test2()
for _ in range(4):
test3()
test2()
test()
print Counter.counts
这将输出:
{'test': 16, 'test3': 4, 'test2': 8}