I use the code below with lambda
to call function once in a loop, it works but now I am trying to call the function for specific times like 3 times in a loop, I
You should work with a decorator, that makes it clear, what you intend to 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
Another approach is to use function instead of class:
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"