我会在函数上使用装饰器来处理跟踪运行次数的情况。
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_oncedef 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 timeaction.has_run = Falseaction() # run once the second time



