我有一個浮點值和一個隊列的問題。 我真的不知道發生了什麼。且聽我是明確的:蟒蛇隊列,字典,浮游物和多個文件的麻煩
這裏是一個名爲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
有人能幫助我嗎?任何線索我做錯了什麼? 謝謝,每一個幫助將非常感激。
這行不行:'def AddQueue(q,tdict = {})'。默認參數只創建*一次*,所以如果不傳遞第二個參數,每次都會產生相同的'dict'。如果在呼叫站點顯式傳遞第二個參數(顯式優於隱式!)真的無法容忍,則使用默認值None,然後添加,如函數的第一行,如果tdict爲None:tdict = {}' – o11c 2014-09-27 19:12:53
我建議你重新將問題重述爲http://sscce.org/ – user1277476 2014-09-27 19:15:00
謝謝@ o11c我會改變這個! – dogasantos 2014-09-27 19:17:53