2014-09-27 52 views
0

我有一個浮點值和一個隊列的問題。 我真的不知道發生了什麼。且聽我是明確的:蟒蛇隊列,字典,浮游物和多個文件的麻煩

這裏是一個名爲cqueue.py:

from collections import deque 
def DestroyQueue(q): 
     while LenQueue(q) >0: 
       q.popleft() 

def GetQueue(q): 
     item=q.popleft() 
     AddQueue(q,item) 
     return item 

def AddQueue(q,tdict={}): 
     q.append(tdict) 

def LenQueue(q): 
     return len(q) 


rcv_queue= deque() 
can_queue= deque() 

經過一些處理的數據,我已經rcv_queue充滿了很多類型的字典。每個字典都有很多值(大約30對或更多)。現在

,在一個被稱爲「match.py​​」新文件,我有這樣的例程:

qlen=LenQueue(rcv_queue) 
while qlen>0: 
    pdict = {} 
    pdict = GetQueue(rcv_queue) 
    #THINGS 
    if something 
     AddQueue(can_queue,pdict) 
    qlen-=1 
DestroyQueue(rcv_queue) 
DbSimCases() 

這種「#THINGS」是關於處理每個字典和每對數據的,新的字典(pdict)存儲在can_queue上,can_queue具有較小的大小(大約5個字符與50對以上的內容)。 DestroyQueue被調用來彈出所有字典並銷燬不再使用的rcv_queue。 因此調用DbSimCases()來捕獲can_queue(來自cqueue.py)並存儲在mysql數據庫上。 問題是: 在match.py​​上,dict浮點值一切正常,但是當從DbSimCases(稱爲base.py的第三個文件)調用can_queue時,float值會更改。 能把那個問題,我使用的打印這樣的:

---上match.py​​

qlen=LenQueue(rcv_queue) 
while qlen>0: 
    pdict = {} 
    pdict = GetQueue(rcv_queue) 
    #THINGS 
    if something 
     AddQueue(can_queue,pdict) 
     o=GetQueue(can_queue) 
     print "pdict->args_score: " + str(p_args_score) 
     print "queue->args_score: " + str(o['p_args_score']) 
    qlen-=1 
DestroyQueue(rcv_queue) 
DbSimCases() 

------ /結束

---上base.py

def DbSimCases() 
    clen=LenQueue(can_queue) 
    while clen > 0: 
     pdict2={} 
     pdict2=GetQueue(can_queue) 
     print "pdict2->args_score: " + str(pdict2['p_args_score']) 

所以結果應該是相同的float 3次。但我得到了這一點:

pdict->args_score: 1.8 
queue->args_score: 1.8 
pdict2->args_score: 0.0 

這裏整個pdict和pdict2(分類和匹配,一行行,看到很多問題,如上述):http://pastebin.com/ZffTMGxq

有人能幫助我嗎?任何線索我做錯了什麼? 謝謝,每一個幫助將非常感激。

+2

這行不行:'def AddQueue(q,tdict = {})'。默認參數只創建*一次*,所以如果不傳遞第二個參數,每次都會產生相同的'dict'。如果在呼叫站點顯式傳遞第二個參數(顯式優於隱式!)真的無法容忍,則使用默認值None,然後添加,如函數的第一行,如果tdict爲None:tdict = {}' – o11c 2014-09-27 19:12:53

+0

我建議你重新將問題重述爲http://sscce.org/ – user1277476 2014-09-27 19:15:00

+0

謝謝@ o11c我會改變這個! – dogasantos 2014-09-27 19:17:53

回答

0

我修好了。

我創建match.py​​第三字典是這樣的:

qlen=LenQueue(rcv_queue) 
while qlen>0: 
    pdict = {} 
    pdict = GetQueue(rcv_queue) 
    auxdict={} 
    #THINGS 
    if something 
    auxdict['key']=pdict['key'] 
    AddQueue(can_queue, auxdict) 
    qlen-=1 
DestroyQueue(rcv_queue) 
DbSimCases() 

它作爲一個輔助字典和只有幾個選擇的類型的字典。 Pdict有很多我不想要的東西,並且使用相同的詞典來傳遞給新的,這是一個錯誤的決定和實踐。