From: Raymond Hettinger <python@rcn.com>
Date: Mon, 24 Jan 2011 22:14:42 +0000 (+0000)
Subject: Add entry for io.BytesIO.getbuffer().
X-Git-Tag: v3.2rc2~56
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4f0e6c7a754dd13344b61487f4729555604f392;p=python

Add entry for io.BytesIO.getbuffer().
---

diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst
index e846a0fe25..1693f7ce0e 100644
--- a/Doc/whatsnew/3.2.rst
+++ b/Doc/whatsnew/3.2.rst
@@ -992,6 +992,35 @@ implemented::
 
 (Patch submitted by Daniel Urban; :issue:`5867`.)
 
+io
+--
+
+The :class:`io.BytesIO` has a new method, :meth:`~io.BytesIO.getbuffer`, which
+provides functionality similar to :func:`memoryview`.  It creates an editable
+view of the data without making a copy.  The buffer's random access and support
+for slice notation are well-suited to in-place editing::
+
+    import io
+
+    REC_LEN, LOC_START, LOC_LEN = 34, 7, 11
+
+    def change_location(buffer, record_number, location):
+        start = record_number * REC_LEN + LOC_START
+        buffer[start: start+LOC_LEN] = location
+
+    >>> byte_stream = io.BytesIO(
+        b'G3805  storeroom  Main chassis    '
+        b'X7899  shipping   Reserve cog     '
+        b'L6988  receiving  Primary sprocket'
+    )
+    >>> buffer = byte_stream.getbuffer()
+    >>> change_location(buffer, 1, b'warehouse  ')
+    >>> change_location(buffer, 0, b'showroom   ')
+    >>> print(byte_stream.getvalue())
+    b'G3805  showroom   Main chassis    ' ->
+    b'X7899  warehouse  Reserve cog     ' ->
+    b'L6988  receiving  Primary sprocket'
+
 reprlib
 -------