Как использовать разделители цифр для целочисленных литералов Python?

Есть ли способ сгруппировать цифры в коде Python для повышения читабельности кода? я пробовал' а также_ которыеразделители цифр некоторых других языков, но безрезультатно.

Также может сработать странный оператор, который соединяет левую и правую стороны.

 Padraic Cunningham02 июл. 2016 г., 02:04
Гвидо упомянул об этом в этом годуyoutu.be/YgtL4S7Hrwo?t=428Наступает 3,6
 Prune02 июл. 2016 г., 02:01
Я думаю, что он хочет заменить целочисленный литерал 31415926 на 31_415_926, например.
 Nizam Mohamed02 июл. 2016 г., 02:03
int('100,000'.replace(',', '')) нормально?
 joel goldstick02 июл. 2016 г., 01:59
Вы можете быть более конкретным .. привести пример?
 ThoAppelsin02 июл. 2016 г., 02:14
Я думал, что ссылки будет достаточно, чтобы прояснить ситуацию. Пример, который дал Чернослив, идеально подходит.
 Li35702 июл. 2016 г., 02:01
Я не уверен, что это реализовано. Есть предложения, но нет реализаций

Ответы на вопрос(4)

Решение Вопроса

Python 3.6 теперь поддерживаетPEP515и поэтому вы можете использовать _ для улучшения читаемости с плавающей и целочисленной литералами.

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 1_1000
11000
>>>

Для исторической справки, вы можете посмотреть на лексический анализ для строгих определенийpython2.7, python3.5 ...

Для python3.6.0a2 и более ранних версий вы должны получить сообщение об ошибке, подобное следующему:

Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1_000
  File "<stdin>", line 1
    1_000
        ^
SyntaxError: invalid syntax
>>> amount = 10_000_000.0
  File "<stdin>", line 1
    amount = 10_000_000.0
                      ^
SyntaxError: invalid syntax

но вы можете использоватьlocale модуль для преобразования строки с такими разделителями в int:

import locale
locale.setlocale(locale.LC_ALL, '')
locale.atoi("1,000,000")

12 * 1000 * 1000, что не идеально, но может быть полезно, если12000000 нужно. Однако имейте в виду, что в то время как в C они эквивалентны, потому что во время компиляции он конвертирует оба в одно и то же, python может не разделить эту оптимизацию.

 ThoAppelsin02 июл. 2016 г., 02:16
За 12 миллионов я бы использовал и рекомендовал12e6.
 TemporalWolf02 июл. 2016 г., 02:14
Благодарю. Я думал, что это будет, но я не хотел распространять плохую информацию.
 mgilson02 июл. 2016 г., 02:08
Если они являются литералами, Python свернет константы. Это не будет делать сворачивание символов, хотя.
 mgilson02 июл. 2016 г., 02:17
@ThoAppelsin - Ну, это зависит от того, хотите ли вы, чтобы ваша ценность былаfloat илиint...
 ShadowRanger02 июл. 2016 г., 02:34
@mgilson: как оказалось, это одна из тех вещей, где порядок имеет большое значение. Если вы используетеx * 100 * 1000 * 1000то не сложится (потому чтоx * 100 может не вернутьint еслиx не являетсяint). Но100 * 1000 * 1000 * x складывается, потому что оценка слева направо работает с известными константами.
 mgilson02 июл. 2016 г., 02:18
@TemporalWolf - Вы всегда можете проверить эти вещи, разобрав источник:dis.dis(lambda : 100 * 200 * 300)

но было предложено интегрировать ее в будущем.

Вы можете увидеть предложение вPEP515.

Ваш ответ на вопрос