Python 3: 不循环的重新运行当前函数

Python 3: Rerun the current function without any loop

我有一个名为 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 的回答必须进一步限制范围:

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

一个选项是 return 来自 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)

另一种选择是 return 是否睡觉的布尔值:

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)

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

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
        # ...