For collections.deque() objects, expose the maxlen parameter as a read-only attribute.
This commit is contained in:
@@ -361,6 +361,15 @@ counts, but the output will exclude results with counts of zero or less.
|
|||||||
``d.appendleft(d.pop())``.
|
``d.appendleft(d.pop())``.
|
||||||
|
|
||||||
|
|
||||||
|
Deque objects also provide one read-only attribute:
|
||||||
|
|
||||||
|
.. attribute:: maxlen
|
||||||
|
|
||||||
|
Maximum size of a deque or *None* if unbounded.
|
||||||
|
|
||||||
|
.. versionadded:: 2.7
|
||||||
|
|
||||||
|
|
||||||
In addition to the above, deques support iteration, pickling, ``len(d)``,
|
In addition to the above, deques support iteration, pickling, ``len(d)``,
|
||||||
``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with
|
``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with
|
||||||
the :keyword:`in` operator, and subscript references such as ``d[-1]``. Indexed
|
the :keyword:`in` operator, and subscript references such as ``d[-1]``. Indexed
|
||||||
|
|||||||
@@ -105,6 +105,16 @@ class TestBasic(unittest.TestCase):
|
|||||||
d.extendleft(it)
|
d.extendleft(it)
|
||||||
self.assertEqual(list(it), [])
|
self.assertEqual(list(it), [])
|
||||||
|
|
||||||
|
def test_maxlen_attribute(self):
|
||||||
|
self.assertEqual(deque().maxlen, None)
|
||||||
|
self.assertEqual(deque('abc').maxlen, None)
|
||||||
|
self.assertEqual(deque('abc', maxlen=4).maxlen, 4)
|
||||||
|
self.assertEqual(deque('abc', maxlen=2).maxlen, 2)
|
||||||
|
self.assertEqual(deque('abc', maxlen=0).maxlen, 0)
|
||||||
|
with self.assertRaises(AttributeError):
|
||||||
|
d = deque('abc')
|
||||||
|
d.maxlen = 10
|
||||||
|
|
||||||
def test_comparisons(self):
|
def test_comparisons(self):
|
||||||
d = deque('xabc'); d.popleft()
|
d = deque('xabc'); d.popleft()
|
||||||
for e in [d, deque('abc'), deque('ab'), deque(), list(d)]:
|
for e in [d, deque('abc'), deque('ab'), deque(), list(d)]:
|
||||||
|
|||||||
@@ -195,6 +195,8 @@ Core and Builtins
|
|||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- collections.deque() objects now have a read-only attribute called maxlen.
|
||||||
|
|
||||||
- Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after
|
- Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after
|
||||||
it is has been populated and properly configured in order to prevent
|
it is has been populated and properly configured in order to prevent
|
||||||
window flashing.
|
window flashing.
|
||||||
|
|||||||
@@ -812,6 +812,20 @@ deque_init(dequeobject *deque, PyObject *args, PyObject *kwdargs)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
deque_get_maxlen(dequeobject *deque)
|
||||||
|
{
|
||||||
|
if (deque->maxlen == -1)
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
return PyLong_FromSsize_t(deque->maxlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyGetSetDef deque_getset[] = {
|
||||||
|
{"maxlen", (getter)deque_get_maxlen, (setter)NULL,
|
||||||
|
"maximum size of a deque or None if unbounded"},
|
||||||
|
{0}
|
||||||
|
};
|
||||||
|
|
||||||
static PySequenceMethods deque_as_sequence = {
|
static PySequenceMethods deque_as_sequence = {
|
||||||
(lenfunc)deque_len, /* sq_length */
|
(lenfunc)deque_len, /* sq_length */
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
@@ -893,7 +907,7 @@ static PyTypeObject deque_type = {
|
|||||||
0, /* tp_iternext */
|
0, /* tp_iternext */
|
||||||
deque_methods, /* tp_methods */
|
deque_methods, /* tp_methods */
|
||||||
0, /* tp_members */
|
0, /* tp_members */
|
||||||
0, /* tp_getset */
|
deque_getset, /* tp_getset */
|
||||||
0, /* tp_base */
|
0, /* tp_base */
|
||||||
0, /* tp_dict */
|
0, /* tp_dict */
|
||||||
0, /* tp_descr_get */
|
0, /* tp_descr_get */
|
||||||
|
|||||||
Reference in New Issue
Block a user