5


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

在 2.7 中:

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

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

干杯

4

4 回答 4

6

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
于 2010-10-26T02:56:05.617 回答
2

我会创建自己的队列类,它继承自双端队列。就像是:

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
于 2010-10-26T02:58:33.283 回答
2

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

也就是说,您可以做一些事情:

  1. 创建一个新类,它继承了所有方法和属性,deque但也实现了一个maxlen属性。
  2. 调整您的代码,这样maxlen就没有必要了
于 2010-10-26T02:41:53.990 回答
1

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

>>> import re

>>> d = deque(maxlen=42)

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

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

是的,我知道这很可怕。我更愿意自己升级到 2.7,但有时我们没有得到我们想要的力量,我们不得不求助于这样的组合。

于 2010-10-26T02:48:31.573 回答