fixed foot-notes; added %b and clarified %s as a synonym for %b

This commit is contained in:
Ethan Furman 2014-03-27 11:06:08 -07:00
parent 2350056bf5
commit 0eb27066c4
1 changed files with 20 additions and 13 deletions

View File

@ -94,14 +94,22 @@ Examples::
``format`` numerics (binary), and 2) it will make 2/3 code easier as Python 2.x
code uses ``%s``; however, it is restricted in what it will accept:
- input type supports ``Py_buffer`` [6]_?
- input type supports ``Py_buffer`` [4]_?
use it to collect the necessary bytes
- input type is something else?
use its ``__bytes__`` method [7]_ ; if there isn't one, raise a ``TypeError``
use its ``__bytes__`` method [5]_ ; if there isn't one, raise a ``TypeError``
In particular, ``%s`` will not accept numbers (use a numeric format code for
that), nor ``str`` (encode it to ``bytes``).
In particular, ``%s`` will not accept numbers nor ``str``. ``str`` is rejected
as the string to bytes conversion requires an encoding, and we are refusing to
guess; numbers are rejected because:
- what makes a number is fuzzy (float? Decimal? Fraction? some user type?)
- allowing numbers would lead to ambiguity between numbers and textual
representations of numbers (3.14 vs '3.14')
- given the nature of wire formats, explicit is definitely better than implicit
Examples::
@ -128,7 +136,7 @@ value. Use cases include developing a new protocol and writing landmarks
into the stream; debugging data going into an existing protocol to see if
the problem is the protocol itself or bad data; a fall-back for a serialization
format; or any situation where defining ``__bytes__`` would not be appropriate
but a readable/informative representation is needed [8]_.
but a readable/informative representation is needed [6]_.
Examples::
@ -178,17 +186,18 @@ Various new special methods were proposed, such as ``__ascii__``,
``__format_bytes__``, etc.; such methods are not needed at this time, but can
be visited again later if real-world use shows deficiencies with this solution.
A competing PEP, ``PEP 460 Add binary interpolation and formatting`` [9]_,
A competing PEP, ``PEP 460 Add binary interpolation and formatting`` [7]_,
also exists.
Objections
==========
The objections raised against this PEP were mainly variations on two themes::
The objections raised against this PEP were mainly variations on two themes:
- the ``bytes`` and ``bytearray`` types are for pure binary data, with no
assumptions about encodings
- offering %-interpolation that assumes an ASCII encoding will be an
attractive nuisance and lead us back to the problems of the Python 2
``str``/``unicode`` text model
@ -213,13 +222,11 @@ Footnotes
.. [1] http://docs.python.org/2/library/stdtypes.html#string-formatting
.. [2] neither string.Template, format, nor str.format are under consideration
.. [3] https://mail.python.org/pipermail/python-dev/2014-January/131518.html
.. [4] to use a str object in a bytes interpolation, encode it first
.. [5] %c is not an exception as neither of its possible arguments are str
.. [6] http://docs.python.org/3/c-api/buffer.html
.. [4] http://docs.python.org/3/c-api/buffer.html
examples: ``memoryview``, ``array.array``, ``bytearray``, ``bytes``
.. [7] http://docs.python.org/3/reference/datamodel.html#object.__bytes__
.. [8] https://mail.python.org/pipermail/python-dev/2014-February/132750.html
.. [9] http://python.org/dev/peps/pep-0460/
.. [5] http://docs.python.org/3/reference/datamodel.html#object.__bytes__
.. [6] https://mail.python.org/pipermail/python-dev/2014-February/132750.html
.. [7] http://python.org/dev/peps/pep-0460/
Copyright