簡體   English   中英

全局變量在不同的函數中是不同的

[英]global variable is different in different functions

我知道在函數中使用全局變量是錯誤的,但是我有一個使用這些變量的代碼,但有一個我找不到解決方法的問題。

我有一個包含以下代碼的模塊:

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”功能的打印內容始終顯示一個空字典。

你能幫我嗎? 錯誤在哪里?

謝謝!

首先,盡管它不會影響您的問題,但無需在此代碼的任何位置使用global關鍵字。 您永遠不會重新分配全局dict,只對它們進行突變,因此無需將它們聲明為全局-Python無論如何都會在模塊范圍內找到它們。

問題是所有模塊級變量都是按進程的。 如果您的receive函數始終在其自己的線程中運行,則它將永遠不會從視圖中看到任何數據。

但是,由於您已經知道使用全局變量是不好的,所以我不確定為什么要這樣做。 有很多方法可以在進程之間傳遞數據。 如果您使用的是Django,最好將其存儲在數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM