如果从 python 中的另一个函数调用,if 语句值在循环中不会改变
if statement value not changing in loop if called from another function in python
那里。我正在创建一个程序,运行 遇到了一个让我和我对基本代码的理解(或者我对我的视力的理解)感到困惑的问题。
根据我的说法,这段代码应该打印出来
Test
当程序启动时,然后当从定时器线程调用 ext() 时,循环变量将立即变为 False,本质上是在 if 语句上返回 false 并且不会继续打印出来 'Test'.
但是即使调用了 ext()(我对此进行了测试),if 语句继续被调用并且循环不会更改为 False。
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext())
t.start()
请帮忙,因为我已经为此困了几个小时。
您需要将 loop
指定为全局变量。在 ext()
中,它认为您正在定义一个名为 loop
的新变量,而您实际上想要修改全局变量。所以正确的代码应该是这个:
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
global loop
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext)
t.start()
您还需要更改最后一行之前的那个而不是调用 ext
将其传递给 Timer
你有两个问题……好吧,真的是三个。首先,ext
引用了一个名为 loop
的局部变量,而不是全局变量。其次,您并没有真正启动线程,因为您调用了函数而不是传入它的引用。第三...当 loop
设置时你不再睡觉,所以你的代码最终会在一个紧密的循环中吃掉一个完整的 cpu。修复前两个将是
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
global loop
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext)
t.start()
那里。我正在创建一个程序,运行 遇到了一个让我和我对基本代码的理解(或者我对我的视力的理解)感到困惑的问题。
根据我的说法,这段代码应该打印出来
Test
当程序启动时,然后当从定时器线程调用 ext() 时,循环变量将立即变为 False,本质上是在 if 语句上返回 false 并且不会继续打印出来 'Test'.
但是即使调用了 ext()(我对此进行了测试),if 语句继续被调用并且循环不会更改为 False。
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext())
t.start()
请帮忙,因为我已经为此困了几个小时。
您需要将 loop
指定为全局变量。在 ext()
中,它认为您正在定义一个名为 loop
的新变量,而您实际上想要修改全局变量。所以正确的代码应该是这个:
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
global loop
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext)
t.start()
您还需要更改最后一行之前的那个而不是调用 ext
将其传递给 Timer
你有两个问题……好吧,真的是三个。首先,ext
引用了一个名为 loop
的局部变量,而不是全局变量。其次,您并没有真正启动线程,因为您调用了函数而不是传入它的引用。第三...当 loop
设置时你不再睡觉,所以你的代码最终会在一个紧密的循环中吃掉一个完整的 cpu。修复前两个将是
from threading import Timer, Thread
from time import sleep
loop = True
def hello():
while True:
if loop == True:
print('Test')
sleep(0.5)
def ext():
global loop
loop = False
th = Thread(target=hello)
th.start()
t = Timer(5, ext)
t.start()