问题
I have had to change from python 2.7 to 2.6.
I've been using a deque with the maxlen property and have been checking what the maxlen is. Apparently you can use maxlen in python 2.6, but in 2.6 deques do not have a maxlen attribute.
What is the cleanest way to check what the maxlen of a deque is in python 2.6?
In 2.7:
from collections import deque
d = deque(maxlen = 10)
print d.maxlen
In 2.6 the deque can be used and the maxlen works properly, but maxlen is not an attribute that can be referred to.
Cheers
回答1:
I would create my own deque
by inheriting from collections.deque
. It is not difficult. Namely, here it is:
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
and this is the new deque at work:
>>> 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
回答2:
maxlen
is a new part of deque
that was first implemented in Python 2.7. It just doesn't exist in Python 2.6.
That said, there are a few things you can do:
- Create a new class that inherits all the methods and attributes from
deque
but also implements amaxlen
attribute. - Adapt your code so that
maxlen
isn't necessary
回答3:
I would create my own queue class that inherits from deque. Something like:
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
回答4:
Well, if you don't have the maxlen
attribute, you can just steal it from the representation:
>>> import re
>>> d = deque(maxlen=42)
>>> d.__repr__()
'deque([], maxlen=42)'
>>> int(re.sub("\)$","",re.sub(".*=","",d.__repr__())))
42
Yes, I know it's horrible. I would prefer to upgrade to 2.7 myself but sometimes we're not given the power we desire, and we have to resort to kludges like this.
来源:https://stackoverflow.com/questions/4020264/check-maxlen-of-deque-in-python-2-6