我知道在函數中使用全局變量是錯誤的,但是我有一個使用這些變量的代碼,我有一個問題,我找不到如何解決。全局變量在不同的函數中有所不同
我用下面的代碼的模塊:
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