我使用下面的代码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)
在循环外添加计数器也有帮助,但我认为应该有更好的解决方案。
答案 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"