我正在尝试在 Python 中创建一个循环控件,可以随时启动和停止循环。
我有一个 start() 函数,从那时起脚本开始在 python 终端中运行,但是我希望当我写 stop 时,它会停止循环,但不会结束整个程序。
示例:
loop = True
def start():
for i in loop:
print('loop..')
print('loop..')
# is constantly displaying things in the terminal and executing commands..
if condition:
loop = False
# stops the loop, but can be started again at any time
print('stopped')
这将类似于下面的代码,它不能正常工作,因为它会无限运行,即使我写 controll('stop')
import time
def controll(status):
global loop_started
if status == 'start':
print("starting loop...")
loop_started = True
starting_loop()
elif status == 'stop':
print("stoping loop...")
loop_started = False
else:
print("invalid")
def starting_loop():
while loop_started:
print("loop started...")
time.sleep(1)
loop_started = False
controll('start') # start the loop
time.sleep(5)
controll('stop') # stop the loop
如何以函数式方式创建此控件?
要以功能方式创建用于启动和停止循环的控件,您可以将循环功能封装在函数中,并利用标志来确定循环是否应继续运行。具体方法如下:
import time
def loop_function():
while True:
print("loop running...")
time.sleep(1)
def control_loop():
loop_running = True
def start():
nonlocal loop_running
if not loop_running:
print("Starting loop...")
loop_running = True
loop_function()
def stop():
nonlocal loop_running
if loop_running:
print("Stopping loop...")
loop_running = False
return start, stop
# Create control functions
start_loop, stop_loop = control_loop()
# Start the loop
start_loop()
# Wait for a while
time.sleep(5)
# Stop the loop
stop_loop()
在此实施中:
loop_function()
包含您要执行的功能
循环。control_loop()
创建并返回两个函数,start()
和stop()
,分别可用于启动和停止循环。start()
和 stop()
函数使用 nonlocal
关键字来修改 loop_running
外部作用域中的 control_loop()
变量。start()
来启动循环,并调用 stop()
来停止循环。