循环调用函数两次或更多次


问题内容

我使用下面的代码lambda在一个循环中调用一次函数,它可以工作,但是现在我试图在特定时间调用该函数,例如在一个循环中调用3次,我寻找它并找到了一些解决方案,但他们在特定时间调用了函数如果没有循环,则当我尝试循环时,没有任何变化。有没有有效的方法可以做到这一点?

这是一个循环的作品,只能打印一次。我想要这样的事情做3次。

def once():
    print "Do function once"
    once.func_code = (lambda:None).func_code

once()

下面的这段代码不会改变任何内容,如果处于循环状态,它将一直持续打印,否则将无法打印。

def repeat_fun(times, f):
    for i in range(times): f()

def do():
    print 'Do function for 3 times'

repeat_fun(3, do)

在循环外添加计数器也有帮助,但我认为应该有一个更好的解决方案。


问题答案:

您应该使用装饰器,以便清楚地说明您打算做什么:

class call_three_times(object):
    def __init__(self, func):
        self.func = func
        self.count = 0

    def __call__(self, *args, **kw):
        self.count += 1
        if self.count <= 3:
            return self.func(*args, **kw)

@call_three_times
def func():
    print "Called only three times"

func() # prints "Called only three times"
func() # prints "Called only three times"
func() # prints "Called only three times"
func() # does nothing