[Python-Dev] PEP 515: Underscores in Numeric Literals (original) (raw)

Martin Panter vadmium+py at gmail.com
Thu Feb 11 19:59:00 EST 2016


On 11 February 2016 at 11:12, Chris Angelico <rosuav at gmail.com> wrote:

On Thu, Feb 11, 2016 at 7:22 PM, Georg Brandl <g.brandl at gmx.net> wrote:

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() with base argument 0, float() and complex(). I'm -0.5 on both of these, with the caveat that if either gets done, both should be. Decimal() shouldn't be different from int() just because there's currently no way to express a Decimal literal; if Python 3.7 introduces such a literal, there'd be this weird rule difference that has to be maintained for backward compatibility, and has no justification left.

I would be weakly in favour of all relevant constructors being updated to match the new syntax. The main reason is just consistency, and that the documentation already kind of guarantees that the literal syntax is supported (definitely for int and float; for complex it is too vague).

To be consistent, the following minor extensions of the syntax should be allowed, which are not legal Python literals: int("0_001"), int("J_00", 20), float("0_001"), complex("0_001").

Maybe also with non-ASCII digits. However I tried writing Arabic-Indic digits (U+0600 etc) and my web browser split the number apart when I inserted an underscore. Maybe a right-to-left thing. But using Devangari digits U+0966, U+0967: int("१_०००") (= 1_000). Non-ASCII digits are apparently intentionally supported, but not documented: <https://bugs.python.org/issue10581>.

(As a side point, I would be fully in favour of Decimal literals. I'd also be in favour of something like "from future import fractionliterals" so 1/2 would evaluate to Fraction(1,2) rather than 0.5. Hence I'm inclined not to support underscores in Decimal().)

Seems more like an argument to have the support in Decimal() consistent with float() etc, i.e. all or nothing.



More information about the Python-Dev mailing list