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

2024-10-03 09:17:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为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正在设置,而在另一些情况下,只提供了一个print语句,系统必须等待下一个周期来决定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字的原因是我想使用具有相同参数的循环。下次,争论可能会改变。已经修改了原始循环函数,以证明这一点

Tags: to函数self情况arg3returningdownprint
3条回答

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

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

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

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

另一个选项是返回是否睡眠的布尔值:

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)

一个选项是从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)

相关问题 更多 >