0
與Python中的其他迭代類似,爲什麼不會像空的PriorityQueue那樣計算爲False
?爲什麼bool評估一個空的PriorityQueue爲真?
>>> from queue import PriorityQueue
>>> q1 = PriorityQueue()
>>> bool(q1)
True
>>> q1.qsize()
0
與Python中的其他迭代類似,爲什麼不會像空的PriorityQueue那樣計算爲False
?爲什麼bool評估一個空的PriorityQueue爲真?
>>> from queue import PriorityQueue
>>> q1 = PriorityQueue()
>>> bool(q1)
True
>>> q1.qsize()
0
你可以從the source code看到,PriorityQueue
類沒有實現__len__
或__bool__
,默認的是,如果一個對象出現時,它是truthy:
如果一個類定義既不
__len__()
也不__bool__()
,其所有 實例被認爲是真實的。
接下來的問題是「爲什麼他們實現了qsize()函數而不是__len __()?」除了源代碼中的註釋之外什麼都不知道,似乎由於多線程和競爭條件,qsize()只返回近似大小,因此他們可能不想使用具有意外結果的魔術方法。謝謝喬恩。 – BeardedOne85
@ BeardedOne85是的,沒錯;實現'__len__'意味着他們實際上知道它是什麼! – jonrsharpe
@ BeardedOne85現在他們只需要保持一致並將'empty()'記錄爲「如果隊列大致爲空則返回True」。 :-) –