2015-01-12 66 views
0
import Queue 

class Job(object): 

    def __init__(self, priority, description): 
     self.priority = priority 
     self.description = description 

    def __cmp__(self,other): 
     return cmp(self.priority, other.priority) 

「cmp」函數需要什麼?在優先隊列中使用def __cmp __(self,other)有什麼用?

從名字看來,它似乎是將優先級與其他進行比較。

+0

https://docs.python.org/2/library/functions.html#cmp –

+0

我相信上校的意思是[RTFM](http://en.wikipedia.org/wiki/RTFM)。 – martineau

回答

1

根據Priority Queue docs,在優先級隊列中,「最低值條目首先被檢索(最低值條目是由排序(列表(條目))[0]返回的條目)」。

通過定義__cmp__功能爲Job對象,隨時sortsorted(或類似功能),與這些作業對象運行,系統知道的順序必須根據這些對象的屬性.priority

因此,當這些作業的使用者試圖從優先隊列中取出一個作業時,隊列會將其作爲最低值的作業傳遞給它。如果沒有__cmp__定義,作業的順序將是任意的(我認爲在CPython中,它將根據每個對象的內存位置結束,這可能不是明顯的順序)。