小编典典

使函数仅在循环中执行一次的有效方法

python

目前,我正在做以下事情,这变得很乏味:

run_once = 0
while 1:
    if run_once == 0:
        myFunction()
        run_once = 1:

我猜还有其他一些可以接受的方式来处理这些东西吗?

我正在寻找的功能是按需执行一次。例如,按下某个按钮。这是一个交互式应用程序,具有许多用户控制的开关。每个开关都有一个垃圾变量,只是为了跟踪是否已运行,似乎效率很低。


阅读 340

收藏
2020-12-20

共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。从您的示例来看,它不需要返回任何东西。

如果您不控制该函数的创建,或者该函数需要在其他上下文中正常使用,则也可以手动应用装饰器。

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
2020-12-20