2013-02-12 38 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網站,如果您決定創建自己的課程,您可能會發現它很有用。