我将使用一个装饰器上的函数来处理跟踪它运行了多少次。
def run_once(f):
def wrapper(*args, **kwargs):
if not wrapper.has_run:
wrapper.has_run = True
return f(*args, **kwargs)
wrapper.has_run = False
return wrapper
@run_once
def my_function(foo, bar):
return foo+bar
现在my_function只会运行一次。其他调用将返回None。只是添加一个else子句if如果你想要返回别的东西。从你的例子,它不需要返回任何东西。
如果你不控制函数的创建,或者函数需要在其他上下文中正常使用,你也可以手动应用装饰器。
action = run_once(my_function)
while 1:
if predicate:
action()
这将使my_function可用于其他用途。
最后,如果你只需要运行一次两次,那么你可以做
action = run_once(my_function)
action() # run once the first time
action.has_run = False
action() # run once the second time