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

发布于 2021-01-29 19:35:32

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

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

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

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

关注者
0
被浏览
78
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我会在函数上使用装饰器来处理跟踪运行次数的情况。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看