Add items
This commit is contained in:
parent
775e10d9e6
commit
abf8e015c2
|
@ -746,7 +746,70 @@ XXX give example
|
||||||
PEP 3116: New I/O Library
|
PEP 3116: New I/O Library
|
||||||
=====================================================
|
=====================================================
|
||||||
|
|
||||||
XXX write this.
|
Python's built-in file objects support a number of methods, but
|
||||||
|
file-like objects don't necessarily support all of them. Objects that
|
||||||
|
imitate files usually support :meth:`read` and :meth:`write`, but they
|
||||||
|
may not support :meth:`readline`. Python 3.0 introduces a layered I/O
|
||||||
|
library in the :mod:`io` module that separates buffering and
|
||||||
|
text-handling features from the fundamental read and write operations.
|
||||||
|
|
||||||
|
There are three levels of abstract base classes provided by
|
||||||
|
the :mod:`io` module:
|
||||||
|
|
||||||
|
* :class:`RawIOBase`: defines raw I/O operations: :meth:`read`,
|
||||||
|
:meth:`readinto`,
|
||||||
|
:meth:`write`, :meth:`seek`, :meth:`tell`, :meth:`truncate`,
|
||||||
|
and :meth:`close`.
|
||||||
|
Most of the methods of this class will often map to a single system call.
|
||||||
|
There are also :meth:`readable`, :meth:`writable`, and :meth:`seekable`
|
||||||
|
methods for determining what operations a given object will allow.
|
||||||
|
|
||||||
|
Python 3.0 has concrete implementations of this class for files and
|
||||||
|
sockets, but Python 2.6 hasn't restructured its file and socket objects
|
||||||
|
in this way.
|
||||||
|
|
||||||
|
.. XXX should 2.6 register them in io.py?
|
||||||
|
|
||||||
|
* :class:`BufferedIOBase`: is an abstract base class that
|
||||||
|
buffers data in memory to reduce the number of
|
||||||
|
system calls used, making I/O processing more efficient.
|
||||||
|
It supports all of the methods of :class:`RawIOBase`,
|
||||||
|
and adds a :attr:`raw` attribute holding the underlying raw object.
|
||||||
|
|
||||||
|
There are four concrete classes implementing this ABC:
|
||||||
|
:class:`BufferedWriter` and
|
||||||
|
:class:`BufferedReader` for objects that only support
|
||||||
|
writing or reading and don't support random access,
|
||||||
|
:class:`BufferedRandom` for objects that support the :meth:`seek` method
|
||||||
|
for random access,
|
||||||
|
and :class:`BufferedRWPair` for objects such as TTYs that have
|
||||||
|
both read and write operations that act upon unconnected streams of data.
|
||||||
|
|
||||||
|
* :class:`TextIOBase`: Provides functions for reading and writing
|
||||||
|
strings (remember, strings will be Unicode in Python 3.0),
|
||||||
|
and supporting universal newlines. :class:`TextIOBase` defines
|
||||||
|
the :meth:`readline` method and supports iteration upon
|
||||||
|
objects.
|
||||||
|
|
||||||
|
There are two concrete implementations. :class:`TextIOWrapper`
|
||||||
|
wraps a buffered I/O object, supporting all of the methods for
|
||||||
|
text I/O and adding a :attr:`buffer` attribute for access
|
||||||
|
to the underlying object. :class:`StringIO` simply buffers
|
||||||
|
everything in memory without ever writing anything to disk.
|
||||||
|
|
||||||
|
(In current 2.6 alpha releases, :class:`io.StringIO` is implemented in
|
||||||
|
pure Python, so it's pretty slow. You should therefore stick with the
|
||||||
|
existing :mod:`StringIO` module or :mod:`cStringIO` for now. At some
|
||||||
|
point Python 3.0's :mod:`io` module will be rewritten into C for speed,
|
||||||
|
and perhaps the C implementation will be backported to the 2.x releases.)
|
||||||
|
|
||||||
|
.. XXX check before final release: is io.py still written in Python?
|
||||||
|
|
||||||
|
In Python 2.6, the underlying implementations haven't been
|
||||||
|
restructured to build on top of the :mod:`io` module's classes. The
|
||||||
|
module is being provided to make it easier to write code that's
|
||||||
|
forward-compatible with 3.0, and to save developers the effort of writing
|
||||||
|
their own implementations of buffering and text I/O.
|
||||||
|
|
||||||
.. seealso::
|
.. seealso::
|
||||||
|
|
||||||
|
@ -1571,7 +1634,7 @@ complete list of changes, or look through the CVS logs for all the details.
|
||||||
(3, 1), (3, 2), (3, 4),
|
(3, 1), (3, 2), (3, 4),
|
||||||
(4, 1), (4, 2), (4, 3)]
|
(4, 1), (4, 2), (4, 3)]
|
||||||
|
|
||||||
``itertools.chain(*iterables)` is an existing function in
|
``itertools.chain(*iterables)`` is an existing function in
|
||||||
:mod:`itertools` that gained a new constructor in Python 2.6.
|
:mod:`itertools` that gained a new constructor in Python 2.6.
|
||||||
``itertools.chain.from_iterable(iterable)`` takes a single
|
``itertools.chain.from_iterable(iterable)`` takes a single
|
||||||
iterable that should return other iterables. :func:`chain` will
|
iterable that should return other iterables. :func:`chain` will
|
||||||
|
|
Loading…
Reference in New Issue