Python 3:在没有任何循环的情况下重新运行当前函数

Posted

技术标签:

【中文标题】Python 3:在没有任何循环的情况下重新运行当前函数【英文标题】:Python 3: Rerun the current function without any loop 【发布时间】:2020-04-18 16:53:56 【问题描述】:

我有一个名为Cycle() 的函数,它可以根据温度调节泵的运行速度。这是它的表示:

def Cycle(self, arg1, arg2, arg3, arg4):
   if arg1 < arg2:
       self.pumpSpeed = 100
   elif ....:
       print("Successfully cooled down. Returning to normal")
   elif ....:
       self.pumpSpeed = 45
   elif ....:
       print("Solar circuit cooled down. Returning to normal")
   elif ....:
       self.pumpSpeed = 0
   .
   .
   so on...

您可以看到在某些情况下PumpSpeed 正在设置,而在其他情况下仅提供了一个打印语句,系统必须等待下一个循环来决定PumpSpeed 应该是什么。

我的运行方式如下:

for i in range(0,10):
    fetchNewArgs()
    Obj.cycle(arg1, arg2, arg3, arg4)
    sleep(5)

问题是系统必须再等待 5 秒才能决定冷却后的新泵速应该是多少

解决方案应该在所需条件下实现continue,但问题是这不是循环所以不能。

有没有办法只在特定条件下立即运行Cycle() 函数而无需再等待 5 秒?

基于@Quamrana 的答案必须进一步限制范围:

    睡眠时间是可变的,并不总是 5,因此返回睡眠时间的部分增加了复杂性。如果不是这种情况,那肯定会奏效。 重要的事情在第一个声明中显然不清楚。我使用Rerun 词的原因是我想使用具有相同参数的循环。下一次,争论可能会改变。修改了原来的循环函数来说明。

【问题讨论】:

【参考方案1】:

改变了问题的性质,函数本身可以修改为也循环:

def Cycle(self, arg1, arg2, arg3, arg4):
    do_loop = True
    while do_loop
        # ...
        elif ...:
            do_loop = False
        # ...

当大多数路由都需要循环时,上述方法有效。或者,如果大多数人想退出,do_loop 标志可以在循环内重置:

def Cycle(self, arg1, arg2, arg3, arg4):
    do_loop = True
    while do_loop
        do_loop = False
        # ...
        elif ...:
            do_loop = True
        # ...

【讨论】:

【参考方案2】:

另一种选择是返回一个布尔值来判断是否休眠:

def Cycle(self, arg1, arg2, arg3, arg4):
    do_sleep = True
    # ...
    elif ...:
        do_sleep = False
    # ...
    return do_sleep

for i in range(0,10):
    if Obj.cycle(arg1, arg2, arg3, arg4):
        sleep(5)

【讨论】:

感谢您的帮助,但我在问题中添加了更多信息。请检查一下。【参考方案3】:

一种选择是从cycle 方法返回sleep 时间的值:

def Cycle(self, arg1, arg2, arg3, arg4):
    default_sleep_time = 5
    # ...
    elif ...:
        default_sleep_time = 0.001  # very short sleep
    # ...
    return default_sleep_time

for i in range(0,10):
    sleep_time = Obj.cycle(arg1, arg2, arg3, arg4)
    sleep(sleep_time)

【讨论】:

以上是关于Python 3:在没有任何循环的情况下重新运行当前函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 WHILE 循环锁定程序的情况下让 UDP 服务器在 Python 3 中监听?

如何在没有任何中断的情况下循环播放音频文件?

Python基础知识+Pychram工具

如何在不延迟任务的情况下优雅地重启 Celery

如何在没有任何延迟的情况下在android中循环播放音频文件?

如何在没有任何循环php的情况下从数组中随机获取项目