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
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
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:
deque
but also implements a maxlen
attribute.maxlen
isn't necessaryI 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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With