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 中监听?