为什么队列没有实现 len() ?

2024-01-03

内置功能len() (https://docs.python.org/3/library/functions.html#len https://docs.python.org/3/library/functions.html#len)返回“对象的长度(项目数)“,但这并没有实现queue.Queue (https://docs.python.org/3/library/queue.html https://docs.python.org/3/library/queue.html)。 反而,queue.Queue has a qsize()当队列明显有长度时,返回队列的近似大小的方法;您可以指定a的最大长度Queue在构造函数中。类似的collections.deque确实与len.

不使用通用的原因有哪些len() for queue.Queue?或者:如果qsize而是被命名为__len__以启用len()功能?


len()没有实现queue.Queue因为这将是一个“有吸引力的麻烦”:只有专家才应该考虑使用它,但“友好的名称”会鼓励非专家使用它。

与大多数序列类型不同(例如list and deque), a queue.Queue具体是intended用于多线程上下文(同样适用于multiprocessing模块的队列类型)。虽然 a 中的项目数量Queue当然在任何特定时间都有一个确定的值,用户代码不可能找出该值是什么:在调用之间.qsize()返回并且您的代码可以look在返回值处,任意数量的其他线程(或进程,在multiprocessingcase) 可能对队列的内容进行了任意数量的更改。

所以关于返回的值唯一可以说的是.qsize()那是Queue had其中有那么多值some过去的时间。当您可以使用返回值时,它可能包含任意更多(或更少)的值。

当然,如果您只运行一个线程,情况就不是这样了——但是这样就没有必要为一个线程的实现复杂性付出代价了。Queue (use a list or a deque反而)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么队列没有实现 len() ? 的相关文章

随机推荐