Update PEP 515 with corrections.
This commit is contained in:
parent
345497f028
commit
1202d81471
46
pep-0515.txt
46
pep-0515.txt
|
@ -13,7 +13,7 @@ Abstract and Rationale
|
|||
======================
|
||||
|
||||
This PEP proposes to extend Python's syntax so that underscores can be used in
|
||||
integral and floating-point number literals.
|
||||
integral, floating-point and complex number literals.
|
||||
|
||||
This is a common feature of other modern languages, and can aid readability of
|
||||
long literals, or literals whose value should clearly separate into parts, such
|
||||
|
@ -30,6 +30,9 @@ Examples::
|
|||
# grouping bits into bytes in a binary literal
|
||||
flags = 0b_0011_1111_0100_1110
|
||||
|
||||
# making the literal suffix stand out more
|
||||
imag = 1.247812376e-15_j
|
||||
|
||||
|
||||
Specification
|
||||
=============
|
||||
|
@ -43,12 +46,12 @@ these exceptions:
|
|||
contribute much to readability.
|
||||
* The number base prefixes ``0x``, ``0o``, and ``0b`` cannot be split up,
|
||||
because they are fixed strings and not logically part of the number.
|
||||
* No underscore allowed after a sign in an exponent (``1e-_5``), because
|
||||
underscores can also not be used after the signs in front of the number
|
||||
(``-1e5``).
|
||||
* No underscore allowed after a decimal point, because this leads to ambiguity
|
||||
with attribute access (the lexer cannot know that there is no number literal
|
||||
in ``foo._5``).
|
||||
* No underscore allowed immediately after a sign in an exponent (``1e-_5``),
|
||||
because underscores can also not be used after the signs in front of the
|
||||
number (``-1e5``).
|
||||
* No underscore allowed immediately after a decimal point, because this leads to
|
||||
ambiguity with attribute access (the lexer cannot know that there is no number
|
||||
literal in ``foo._5``).
|
||||
|
||||
There appears to be no reason to restrict the use of underscores otherwise.
|
||||
|
||||
|
@ -66,14 +69,28 @@ The production list for integer literals would therefore look like this::
|
|||
hexdigit: digit | "a"..."f" | "A"..."F"
|
||||
bindigit: "0" | "1"
|
||||
|
||||
For floating-point literals::
|
||||
For floating-point and complex literals::
|
||||
|
||||
floatnumber: pointfloat | exponentfloat
|
||||
pointfloat: [intpart] fraction | intpart "."
|
||||
exponentfloat: (intpart | pointfloat) exponent
|
||||
intpart: digit (digit | "_")*
|
||||
fraction: "." intpart
|
||||
pointfloat: [intpart] "_"* "." intpart | intpart "_"* "."
|
||||
exponentfloat: (intpart | pointfloat) "_"* exponent
|
||||
intpart: digit [(digit | "_")* digit]
|
||||
exponent: ("e" | "E") "_"* ["+" | "-"] digit [decimalrest]
|
||||
imagnumber: (floatnumber | intpart) "_"* ("j" | "J")
|
||||
|
||||
|
||||
Further Considerations
|
||||
======================
|
||||
|
||||
This PEP currently only proposes changing the literal syntax. The following
|
||||
extensions are open for discussion:
|
||||
|
||||
* Allowing underscores in string arguments to the ``Decimal`` constructor. It
|
||||
could be argued that these are akin to literals, since there is no Decimal
|
||||
literal available (yet).
|
||||
|
||||
* Allowing underscores in string arguments to ``int()``, ``float()`` and
|
||||
``complex()``.
|
||||
|
||||
|
||||
Alternative Syntax
|
||||
|
@ -88,6 +105,11 @@ limited. Common rules are (see the "other languages" section):
|
|||
* Only one consecutive underscore allowed, and only between digits.
|
||||
* Multiple consecutive underscore allowed, but only between digits.
|
||||
|
||||
A less common rule would be to allow underscores only every N digits (where N
|
||||
could be 3 for decimal literals, or 4 for hexadecimal ones). This is
|
||||
unnecessarily restrictive, especially considering the separator placement is
|
||||
different in different cultures.
|
||||
|
||||
Different Separators
|
||||
--------------------
|
||||
|
||||
|
|
Loading…
Reference in New Issue