gpt4 book ai didi

python - 关于Python全局变量

转载 作者:行者123 更新时间:2023-12-01 05:04:28 25 4
gpt4 key购买 nike

    import sys
from threading import Thread

is_online=1

class CommandListenerThread(Thread):
global is_online
def run(self):
while is_online:
next_command=sys.stdin.readlines();
if next_command == 'exit':
is_online=0
else:
print next_command



listener=CommandListenerThread()
listener.start()

当我运行此 python 代码时,它显示错误:“UnboundLocalError:分配之前引用了局部变量'is_online'”

我测试了另一个代码,它使用相同的方式访问类内的全局变量,并且工作正常。那么,这段特定代码有什么问题呢?

使用线程监听命令行的代码可能看起来很奇怪,但它只是我的程序的一部分在运行整个程序时出现错误。

谢谢大家

最佳答案

global is_online移动到run()来解决错误。

为了解决您的其他问题(在下面的评论中),为什么不将其设为静态类变量?

class CommandListenerThread(Thread):    
is_online = 1
def run(self):
print CommandListenerThread.is_online

如果您必须使用另一个具有全局 is_online 的代码,您可以采用 DI(依赖注入(inject))方法,如下所示:

导入系统从线程导入线程

is_online = 2

class CommandListenerThread(Thread):

def __init__(self, is_online):
super(CommandListenerThread, self).__init__()
CommandListenerThread.is_online = is_online # now it's a static member
# if you want to make it an instance member use self.is_online

def run(self):
print CommandListenerThread.is_online

listener=CommandListenerThread(is_online) # inject the value to the constructor
listener.start()

关于python - 关于Python全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com