5


Python2.7から2.6に変更する必要がありました。
maxlenプロパティでdequeを使用していて、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は参照できる属性ではありません。

乾杯

4

4 に答える 4

6

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
于 2010-10-26T02:56:05.617 に答える
2

maxlendequeは、 Python2.7で最初に実装された新しい部分です。Python2.6には存在しません。

そうは言っても、できることがいくつかあります。

  1. すべてのメソッドと属性を継承するdequeだけでなく、属性を実装する新しいクラスを作成しmaxlenます。
  2. maxlen必要がないようにコードを調整します
于 2010-10-26T02:41:53.990 に答える
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
于 2010-10-26T02:58:33.283 に答える
1

属性がない場合はmaxlen、表現から属性を盗むことができます。

>>> import re

>>> d = deque(maxlen=42)

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

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

はい、私はそれが恐ろしいことを知っています。自分で2.7にアップグレードしたいのですが、希望するパワーが与えられないことがあり、このような応急修理に頼らざるを得ません。

于 2010-10-26T02:48:31.573 に答える