擅长:python、mysql、java
<p><code>PriorityQueue</code>不支持使for循环语法适用于数据结构的内部函数(例如<code>__iter__</code>和<code>next</code>)。在</p>
<p>相反,可以使用<code>while</code>循环,该循环使用<code>empty</code>函数检查队列是否为空,如果不为空,则根据需要调用<code>get</code>或{<cd7>},以便在项目准备就绪时从队列中移除并返回。在</p>
<p>因为它需要调用者的特殊知识才能知道从队列中消费下一个项目的含义,所以不方便支持循环迭代。for循环对队列有什么作用?总是假定它在成功使用当前项后立即使用<code>get_nowait</code>进行消费?然后,如果队列没有立即准备好要返回的任何项,则可能会引发异常。它是否应该始终使用<code>get</code>并永远阻止等待每个项?那么for循环语法将掩盖可能的复杂情况,永远等待。在</p>
<p>标准库实现没有选择这些选项中的一个作为默认循环行为(这可能会导致许多队列用例出现意外行为),而是让调用者承担执行某些操作的负担,比如我提到的while循环,以显式描述如何“获取”队列中的每个项。在</p>
<p>(注意:我假设这个<code>PriorityQueue</code>库/实现是<a href="https://docs.python.org/3/library/queue.html#queue.PriorityQueue" rel="nofollow noreferrer">same as from the standard library ^{<cd11>} module</a>)。在</p>