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

时间:2016-06-12 07:18:53

标签: python python-2.7 function loops lambda

我使用下面的代码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)

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

2 个答案:

答案 0 :(得分:6)

您应该使用装饰器,这使得它清楚,您打算做什么:

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

答案 1 :(得分:5)

另一种方法是使用函数而不是类:

def call_three_times(func, *args, **kwargs):
    def wrapper(*args, **kwargs):
        wrapper.called += 1
        return func(*args, **kwargs) if wrapper.called <= 3 else None
    wrapper.called = 0
    return wrapper


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