2013-02-12 26 views
0

如果我想创建一个带有边界的队列,但是我想为函数内部的队列创建边界而不是使用Class BoundedQueue.Queue(maxsize = 4),该怎么办? (关于最大绑定队列的信息:http://docs.python.org/2/library/queue.htmlpython中的有界队列

有什么建议吗?

这是我的代码; capacity是最大的界限。

class BoundedQueue: 
    # Constructor, which creates a new empty queue, with user-specified capacity: 
    def __init__(self, capacity): 
     self.items = [] 
     assert(capacity >= 0), "not positive" 

     try: 
      capacity = int(capacity) 
     except TypeError as inst: 
      print("Error", inst.args) 
     except: 
      print("error") 
     else: 
      itemmax = capacity 
+0

你准确的问题是什么?不知道我关注 – Crisfole 2013-02-12 21:42:59

+3

我不确定你的实际问题在这里。通过“为函数内部的队列创建边界”,你的意思是容量是变量而不是文字值?标准的'Class BoundedQueue.Queue(maxsize = capacity)'不应该在这里工作。 – 2013-02-12 21:43:14

+0

[deque](http://docs.python.org/2/library/collections.html#collections.deque)可以由maxlen限制 - 它足够吗? – sotapme 2013-02-12 21:46:55

回答

0

无论你创建你自己的BoundedQueue类或继承现有的东西你似乎缺少的是你将需要存储最大尺寸在类的__init__()(即self._maxsize = capacity),然后在任何使用它Queue的其他方法添加元素以防止超过这些元素的数量。

为了做到这一点,您还需要跟踪它添加和删除时有多少内容,这意味着您可能还需要该值的self._cursize属性,这也应该是在构造函数中初始化。如果您继承了一个基类,它可能已经为您保留了这一点,所以您可以直接使用它。

“Q:Python中缺少哪些其他主要类型?”中有(无限制)队列实现的一些示例?部分Peter Norvig的The Python IAQ: Infrequently Answered Questions网站,如果您决定创建自己的课程,您可能会发现它很有用。