我知道在函数中使用全局变量是错误的,但是我有一个使用这些变量的代码,我有一个问题,我找不到如何解决。全局变量在不同的函数中有所不同
我用下面的代码的模块:
messages = {}
def MessageReceived(message):
global messages
print messages
msgNumber = message[0]
if messages.has_key(msgNumber):
messageData = messages.pop(msgNumber)
ReleaseMessageNumber(msgNumber)
if messageData["callback"] is not None:
messageData["callback"](messageData["originalMessage"])
def SendMessage(message, callBack):
global messages
msgNumber = GetMessageNumber()
messageToSend = msgNumber + message + "\0"
messages[msgNumber] = { 'originalMessage' : message, 'time' : time.time(), 'callback' : callBack }
print messages
Send(messageToSend)
return True
一般来说,函数“SendMessage消息”建立与消息号的消息,发送该消息的存储的消息和回叫在全球字典。
函数“MessageReceived”从全局字典中获取特定消息的回调并调用它。
问题是这里似乎存在2个不同的字典。
当我发送消息时,我发现字典增长(每次发送消息时都会向字典添加新记录),但“MessageReceived”函数的打印总是显示空字典。
你能帮我吗?这里的错误在哪里?
谢谢!
您的代码不是[MCVE],因此测试它并不容易。但是全球的“讯息”是一个列表,而不是一个字典;它应该是'messages = {}'。 FWIW,比使用全球共享数据更好的方法是创建一个类。 –
你可以发布更多的细节周围如何被称为? send方法有什么作用?你确定你是多线程的吗?如果你使用多处理,那么全局变量不会被共享。 –
我希望在一个请求中调用这些函数。否则,全局变量没什么意义(它们会根据每个请求进行初始化) – Pynchia