目前,我正在做以下事情,这变得很乏味:
run_once = 0 while 1: if run_once == 0: myFunction() run_once = 1:
我猜还有其他一些可以接受的方式来处理这些东西吗?
我正在寻找的功能是按需执行一次。例如,按下某个按钮。这是一个交互式应用程序,具有许多用户控制的开关。每个开关都有一个垃圾变量,只是为了跟踪是否已运行,似乎效率很低。
我会在函数上使用装饰器来处理跟踪运行次数的情况。
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。从您的示例来看,它不需要返回任何东西。
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