Python 为什么空优先级队列的布尔求值为真?

Python 为什么空优先级队列的布尔求值为真?,python,queue,priority-queue,Python,Queue,Priority Queue,为什么一个空的PriorityQueue不像Python中的其他iterables那样计算为False >>> from queue import PriorityQueue >>> q1 = PriorityQueue() >>> bool(q1) True >>> q1.qsize() 0 从中可以看出,PriorityQueue类没有实现或,默认情况下,如果存在对象,则它是真实的: 如果一个类既不定义\uu len\

为什么一个空的PriorityQueue不像Python中的其他iterables那样计算为
False

>>> from queue import PriorityQueue
>>> q1 = PriorityQueue()
>>> bool(q1)
True
>>> q1.qsize()
0
从中可以看出,
PriorityQueue
类没有实现或,默认情况下,如果存在对象,则它是真实的:

如果一个类既不定义
\uu len\uuuuuuuuuuuuuuuuuuuuuuuuuu()
也不定义
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
实例被认为是正确的


下一个问题是“为什么他们实现了一个qsize()函数而不是_len__()?”除了源代码中的注释外,他们什么都不知道,似乎由于多线程和竞争条件,qsize()只返回一个近似的大小,所以他们可能不想使用一个具有意外结果的神奇方法。谢谢你,乔恩。@BeardedOne85是的,没错;实现
\uuu len\uuu
意味着他们实际上知道它是什么@BeardedOne85现在它们只需要保持一致,并将
empty()
记录为“如果队列大约为空,则返回True:-)