在python 2.6中检查deque的maxlen

时间:2010-10-26 02:30:21

标签: python python-2.6 deque


我不得不从python 2.7改为2.6 我一直在使用带有maxlen属性的双端队列,并且一直在检查maxlen是什么。显然你可以在python 2.6中使用maxlen,但在2.6 deques中没有maxlen属性 在python 2.6中检查双端队列的maxlen的最简洁方法是什么?

在2.7:

from collections import deque
d = deque(maxlen = 10)
print d.maxlen

在2.6中,可以使用deque并且maxlen正常工作,但是maxlen不是可以引用的属性。

干杯

4 个答案:

答案 0 :(得分:5)

我会通过继承deque创建自己的collections.deque。这并不困难。即,这是:

import collections

class deque(collections.deque):
    def __init__(self, iterable=(), maxlen=None):
        super(deque, self).__init__(iterable, maxlen)
        self._maxlen = maxlen
    @property
    def maxlen(self):
        return self._maxlen

这是工作中的新副作用:

>>> d = deque()
>>> print d
deque([])
>>> print d.maxlen
None
>>> d = deque(maxlen=3)
>>> print d
deque([], maxlen=3)
>>> print d.maxlen
3
>>> d = deque(range(5))
>>> print d
deque([0, 1, 2, 3, 4])
>>> print d.maxlen
None
>>> d = deque(range(5), maxlen=3)
>>> print d
deque([2, 3, 4], maxlen=3)
>>> print d.maxlen
3

答案 1 :(得分:2)

maxlendeque的新部分,最初是在Python 2.7中实现的。它只是在Python 2.6中不存在。

那就是说,你可以做一些事情:

  1. 创建一个新类,该类继承deque中的所有方法和属性,但也实现maxlen属性。
  2. 调整您的代码,以便maxlen不是必需的

答案 2 :(得分:2)

我会创建自己的队列类,它继承自deque。类似的东西:

class Deque(deque):
    def __init__(self,*args,**kwargs):
        deque.__init__(self, *args, **kwargs)
        self.maxlen = kwargs.get('maxlen',None)

>>>d = Deque(maxlen=10)
>>>d.maxlen
>>>10

答案 3 :(得分:1)

好吧,如果你没有maxlen属性,你可以从表示中窃取它:

>>> import re

>>> d = deque(maxlen=42)

>>> d.__repr__()
'deque([], maxlen=42)'

>>> int(re.sub("\)$","",re.sub(".*=","",d.__repr__())))
42

是的,我知道这太可怕了。我宁愿自己升级到2.7,但有时我们没有得到我们想要的力量,我们不得不诉诸这样的kludges。