summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-07-12 20:01:52 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-07-12 20:01:52 (GMT)
commitc779515a75fc083d355aef5121ed78f0b0a58588 (patch)
tree5786daca0b3e931ba1bf0a670099d0c73a8424e2 /Doc
parent2efaf967717f65303e8e8bcad9a9225f0f6f7713 (diff)
downloadcpython-c779515a75fc083d355aef5121ed78f0b0a58588.zip
cpython-c779515a75fc083d355aef5121ed78f0b0a58588.tar.gz
cpython-c779515a75fc083d355aef5121ed78f0b0a58588.tar.bz2
Fix definition of len() and indexing for memoryview objects (part of #7696).
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/stdtypes.rst38
1 files changed, 29 insertions, 9 deletions
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index be71726..5f1b732 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -2264,10 +2264,19 @@ is generally interpreted as simple bytes.
buffer protocol. Builtin objects that support the buffer protocol include
:class:`bytes` and :class:`bytearray`.
- ``len(view)`` returns the total number of bytes in the memoryview, *view*.
+ A :class:`memoryview` has the notion of an *element*, which is the
+ atomic memory unit handled by the originating object *obj*. For many
+ simple types such as :class:`bytes` and :class:`bytearray`, an element
+ is a single byte, but other types such as :class:`array.array` may have
+ bigger elements.
+
+ ``len(view)`` returns the total number of elements in the memoryview,
+ *view*. The :class:`~memoryview.itemsize` attribute will give you the
+ number of bytes in a single element.
A :class:`memoryview` supports slicing to expose its data. Taking a single
- index will return a single byte. Full slicing will result in a subview::
+ index will return a single element as a :class:`bytes` object. Full
+ slicing will result in a subview::
>>> v = memoryview(b'abcefg')
>>> v[1]
@@ -2278,11 +2287,8 @@ is generally interpreted as simple bytes.
<memory at 0x77ab28>
>>> bytes(v[1:4])
b'bce'
- >>> v[3:-1]
- <memory at 0x744f18>
- >>> bytes(v[4:-1])
- If the object the memory view is over supports changing its data, the
+ If the object the memoryview is over supports changing its data, the
memoryview supports slice assignment::
>>> data = bytearray(b'abcefg')
@@ -2302,12 +2308,18 @@ is generally interpreted as simple bytes.
Notice how the size of the memoryview object cannot be changed.
-
:class:`memoryview` has two methods:
.. method:: tobytes()
- Return the data in the buffer as a bytestring.
+ Return the data in the buffer as a bytestring. This is equivalent to
+ calling the :class:`bytes` constructor on the memoryview. ::
+
+ >>> m = memoryview(b"abc")
+ >>> m.tobytes()
+ b'abc'
+ >>> bytes(m)
+ b'abc'
.. method:: tolist()
@@ -2325,7 +2337,15 @@ is generally interpreted as simple bytes.
.. attribute:: itemsize
- The size in bytes of each element of the memoryview.
+ The size in bytes of each element of the memoryview::
+
+ >>> m = memoryview(array.array('H', [1,2,3]))
+ >>> m.itemsize
+ 2
+ >>> m[0]
+ b'\x01\x00'
+ >>> len(m[0]) == m.itemsize
+ True
.. attribute:: shape