全局变量在不同的函数中是不同的

2024-10-03 15:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道在函数中使用全局变量是错误的,但我有一个使用这些变量的代码,我有一个问题,我找不到如何解决。你知道吗

我有一个模块,代码如下:

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”从全局字典获取特定消息的回调并调用它。你知道吗

问题是这里似乎有两种不同的词典。你知道吗

当我发送消息时,我看到字典在增长(每次我发送消息时都会向字典中添加一条新记录),但是“MessageReceived”函数的打印总是显示一个空字典。你知道吗

你能帮我吗?虫子在哪里?你知道吗

谢谢!你知道吗


Tags: 函数代码消息messageif字典timedef
1条回答
网友
1楼 · 发布于 2024-10-03 15:24:38

首先,尽管它不会影响您的问题,但在这段代码的任何地方都不需要使用global关键字。您永远不会重新分配全局dict,只会对它们进行变异,因此不需要将它们声明为全局dict—无论如何,Python都会在模块范围中找到它们。你知道吗

但问题是所有模块级变量都是每个进程的。如果receive函数总是在它自己的线程中运行,它将永远看不到视图中的任何数据。你知道吗

既然你已经知道使用全局变量是不好的,我不知道你为什么要这么做。有很多方法可以在进程之间传递数据;如果使用Django,将数据存储在数据库中可能是最好的方法。你知道吗

相关问题 更多 >