Проверьте maxlen deque в Python 2.6 - PullRequest
       12

Проверьте maxlen deque в Python 2.6

5 голосов
/ 26 октября 2010


Мне пришлось перейти с Python 2.7 на 2.6.
Я использовал deque со свойством maxlen и проверял, что такое maxlen. Очевидно, вы можете использовать maxlen в python 2.6, но в 2.6 в deques нет атрибута maxlen.
Какой самый простой способ проверить, что такое maxlen deque в python 2.6?

В 2.7:

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

В 2.6 можно использовать deque, и maxlen работает правильно, но maxlen не является атрибутом, к которому можно обратиться.

Приветствия

Ответы [ 4 ]

5 голосов
/ 26 октября 2010

Я бы создал свой собственный 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

, и это новый deque на работе:

>>> 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 голосов
/ 26 октября 2010

Я бы создал свой собственный класс очереди, который наследуется от 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
2 голосов
/ 26 октября 2010

maxlen - это новая часть deque, которая впервые была реализована в Python 2.7.Его просто нет в Python 2.6.

Тем не менее, есть несколько вещей, которые вы можете сделать:

  1. Создать новый класс, который наследует все методы и атрибуты от deque, но также реализует атрибут maxlen.
  2. Адаптируйте свой код так, чтобы maxlen не требовалось
1 голос
/ 26 октября 2010

Ну, если у вас нет атрибута maxlen, вы можете просто украсть его из представления:

>>> import re

>>> d = deque(maxlen=42)

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

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

Да, я знаю, это ужасно. Я бы предпочел обновить себя до 2.7, но иногда нам не хватает силы, которую мы желаем, и нам приходится прибегать к подобным кладжам.

...