2016-07-01 2 views
15

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

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

+0

вы можете быть более конкретным .. дать пример? –

+2

Я думаю, что он хочет заменить целочисленный литерал 31415926 на 31_415_926, например. – Prune

+0

Я не уверен, что это реализовано. Есть предложения, но не реализации – Li357

ответ

16

Обновление через несколько лет: 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 
3

В Python такой функции нет, но было предложено интегрировать ее в будущем.

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

2

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

+1

Если они являются литералами, питон сбрасывает константы. Тем не менее, он не будет делать никаких складных символов. – mgilson

+0

Спасибо. Я думал, что так будет, но я не хотел распространять плохую информацию. – TemporalWolf

+2

За 12 миллионов я буду использовать и рекомендовать '12e6'. – ThoAppelsin

4

В настоящее время нет разделителя тысяч в Python, но вы можете использовать locale модуль для преобразования строки с такими сепараторами к междунар:

import locale 
locale.setlocale(locale.LC_ALL, '') 
locale.atoi("1,000,000") 
Смежные вопросы