Vérifiez maxlen de deque en python 2.6
-
26-09-2019 - |
Question
J'ai dû changer de Python 2.7 à 2.6.
Je me sers d'un deque avec la propriété maxlen et ont été vérifier ce que le maxlen est. Apparemment, vous pouvez utiliser maxlen en python 2.6, mais 2.6 Deques ne possède pas d'attribut maxlen.
Quelle est la plus propre moyen de vérifier ce que le Maxlen d'un deque est en python 2.6?
2.7:
from collections import deque
d = deque(maxlen = 10)
print d.maxlen
Dans le 2.6 deque peut être utilisé et les travaux maxlen correctement, mais maxlen n'est pas un attribut qui peut être appelé.
Vive
La solution
Je voudrais créer mon propre deque
en héritant de collections.deque
. Ce n'est pas difficile. A savoir, la voici:
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
et c'est le nouveau deque au travail:
>>> 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
Autres conseils
maxlen
est une nouvelle partie de deque
qui a d'abord été mis en œuvre en Python 2.7. Il n'existe tout simplement pas en Python 2.6.
Cela dit, il y a quelques choses que vous pouvez faire:
- Créer une nouvelle classe qui hérite de toutes les méthodes et les attributs de
deque
mais met également en œuvre un attributmaxlen
. - Adaptez votre code afin que
maxlen
n'est pas nécessaire
Je voudrais créer ma propre classe de file d'attente qui hérite de deque. Quelque chose comme:
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
Eh bien, si vous n'avez pas l'attribut maxlen
, vous pouvez simplement voler de la représentation:
>>> import re
>>> d = deque(maxlen=42)
>>> d.__repr__()
'deque([], maxlen=42)'
>>> int(re.sub("\)$","",re.sub(".*=","",d.__repr__())))
42
Oui, je sais que c'est horrible. Je préférerais passer à 2,7 moi, mais parfois nous ne sommes pas donné le pouvoir que nous désirons, et nous devons recourir à des bidouilles comme celui-ci.