我不得不从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不是可以引用的属性。
干杯
答案 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)
maxlen
是deque
的新部分,最初是在Python 2.7中实现的。它只是在Python 2.6中不存在。
那就是说,你可以做一些事情:
deque
中的所有方法和属性,但也实现maxlen
属性。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。