当前位置: 首页 > 面试题库 >

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

鞠安民
2023-03-14
问题内容

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

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

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

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


 类似资料:
  • 问题内容: 我很难弄清楚为什么while循环实际上不会循环。它运行一次并停止。 我正在尝试使其循环,以便用户能够多次转换单位。任何帮助都欢迎! 问题答案: 问题在于,当您呼叫时,它会占用该号码,但不会占用该号码之后的换行符。要解决此问题,只需在调用后放一行代码。 示例和完整说明: 假设您输入“ km”,按回车,“ 123”,按回车。从程序的角度来看,输入流为。 该代码获取值,并且使输入超出第一个。

  • 我试图用Java实现一个简单的客户机-服务器应用程序。 这是代码: 客户端.java 服务器.java 这是主要类: 代码的逻辑很简单:客户端和服务器都在等待< code>while(true)循环中的消息。 服务器的< code>listen方法中的< code>while循环执行得很好。但是,在< code>listenForMessages方法中,循环似乎只执行一次。我只看到一个“在循环”印

  • 问题内容: 我正在尝试实现一个每秒循环的ScheduledExecutorService线程,但是截至目前,它仅循环一次。 我的问题是如何设置它,使其定期循环而不是一次迭代? 另外,如何将连接池传递到线程中,以便每次迭代都可以查询数据库?任何帮助深表感谢。 问题答案: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent

  • 我在尝试创建一个函数时遇到了麻烦。我想把数字转换成一周中指定的日子。例如:1='星期一',2='星期二',3='星期三',4='星期四',5='星期五',6='星期六',0='星期日' 下面是我编写函数的尝试,但我得到了一个错误,我还认为一定有一种方法可以循环它。我只是不知道怎么做。

  • 本文向大家介绍C#中for循环、while循环循环执行的方法,包括了C#中for循环、while循环循环执行的方法的使用技巧和注意事项,需要的朋友参考一下 先给大家介绍下C#中的循环执行for循环 在这一节练习中,我们向大家介绍一下C#中的另一种重要的循环语句,for循环。 表达式1:一般为赋值表达式,给控制变量赋初值; 表达式2:逻辑表达式,循环控制条件;当条件为真时,循环执行循环体中的语句。