0
空のPriorityQueueは、Pythonの他のiterablesと同様にFalse
と評価されないのはなぜですか?空のPriorityQueueのブール評価が真であるのはなぜですか?
>>> from queue import PriorityQueue
>>> q1 = PriorityQueue()
>>> bool(q1)
True
>>> q1.qsize()
0
空のPriorityQueueは、Pythonの他のiterablesと同様にFalse
と評価されないのはなぜですか?空のPriorityQueueのブール評価が真であるのはなぜですか?
>>> from queue import PriorityQueue
>>> q1 = PriorityQueue()
>>> bool(q1)
True
>>> q1.qsize()
0
あなたがthe source codeからわかるように、PriorityQueue
クラスは__len__
または__bool__
を実装していない、デフォルトでは、オブジェクトが存在する場合、それはtruthyだということです。
クラスはどちらも定義されていない場合
__len__()
__bool__()
でも、そのすべての インスタンスが真と見なされます。
次の質問は、「なぜ__len __()の代わりにqsize()関数を実装したのでしょうか?ソース内のコメント以外に何も分かっていないと、マルチスレッドや競合状態のため、qsize()はおおよそのサイズしか返さないため、予期しない結果を伴う魔法を使用したくないと思われます。ありがとうジョン。 – BeardedOne85
@ BeardedOne85はい、そうです。 '__len__'を実装することは、実際にそれが何であるかを知っていることを意味します! – jonrsharpe
@ BeardedOne85これで、一貫性を保ち、 'empty()'を "キューがおおよそ空であれば真を返す"と文書化するだけです。 :-) –