[英]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.