Введение
Переводчик Python может с легкостью манипулировать очень большими числами. Тем не менее, мы, людям, немного труднее чтения, когда они достигают определенного размера. Например, на момент написания статьи 7723151489 были одной (безошибочно точной) оценкой населения мира. Насколько читаемо это это число для вас? Конечно, до тех пор, пока мы просто хотим работать с ним, мы можем использовать его как есть и позволить переводчику делать свои вещи. Однако, если нам нужно отобразить эту информацию пользователю, так как, вероятно, в какой-то момент мы захотим представить ее в более удобном формате. Вот на что мы посмотрим здесь.
Давайте немного увеличим, и представьте, что мы пишем простую программу для хранения информации о стране, включая размер населения …
(В этой статье будут представлены некоторые базовые знания о форматированных струнных литералах Python, также известных как F-строки. Очень краткий пример должен служить учебником:
name = "mark" print(f"Hello, {name.title()}. You're looking great today!")
На второй строке мы префиксом буквальной буквы (все в рамках цитаты – это струнный буквальный) с «F» и в вьющихся кронштейнах включает в себя то, что известно как «поле для замены». F-строка оценивается во время выполнения, и, по приведению выше, мы получаем следующий выход:
>>> Hello, Mark. You're looking great today!
Простой!)
Подчеркнуть в числовых литералах
Мы начнем со следующего, получив некоторую важную информацию о трех странах …
countries = { "scotland": {"capital": "edinburgh", "population": 5438000}, "belgium": {"capital": "brussels", "population": 11250000}, "germany": {"capital": "berlin", "population": 82665600}, }
Мы уже можем видеть, что цифры населения довольно трудно сканировать. Не проблема для интерпретатора Python, но с использованием превосходной максима, что наш код должен быть легко читаемым по Люди , это то, что мы должны обратиться. К счастью, Python 3.6 сделал это простым – мы можем просто представить подчеркивание (для получения дополнительной информации по этому поводу, посмотрите PEP 515 – подчеркивают в числовых литералах ).
countries = { "scotland": {"capital": "edinburgh", "population": 5_438_000}, "belgium": {"capital": "brussels", "population": 11_250_000}, "germany": {"capital": "berlin", "population": 82_665_600}, }
Намного лучше! Но что происходит, когда мы отображаем эту информацию? Если мы запустим следующее …
for country, info in countries.items(): print( f"\n{country.title()}'s capital is {info['capital'].title()}. " f"{country.title()} has a population of around {info['population']}." )
… Мы получаем это:
Scotland's capital city is Edinburgh. Scotland has a population of around 5438000. Belgium's capital city is Brussels. Belgium has a population of around 11250000. Germany's capital city is Berlin. Germany has a population of around 82665600.
Форматирование, которое мы представили с нашими подчеркиванием, не сохранилось (PEP 515 объясняет, что «… У подчеркивания нет семантического значения, а литералы анализируются так, как если бы подчеркиваемые не было»), и мы вернулись к проблеме скорее трудно понять числа. «Исправление» очень простое, но прежде чем мы доберемся до него, нам нужно немного понять спецификацию формата, и это сопровождает мини-языку формата.
Спецификация формата и спецификация формата мини-языку
Как это часто бывает, Python предлагает очень простой, родной способ решить нашу проблему – строки формата. Они позволяют нам манипулировать нашими строками различными способами, используя идентификаторы «Имя поля», «преобразование» и «спецификация формата» в поле замены. Не все требуются, и, на самом деле, единственным, что нам нужно здесь, является спецификация формата.
Спецификация формата вводится с толстой кишкой. Мы следуем за этой толстой кишкой с любым из ряда вариантов, каждый из которых предоставляет нашу строку определенное качество формата. Эти варианты описаны Формат-спецификация мини-языка – Как следует из названия, это синтаксис, доступный для нас в поле Spec Format. Например, параметр «Знак» позволяет нам направлять, должны ли все числа быть предварительно профиксированы соответствующим знаком (положительным или отрицательным); должны ли только отрицательные числа иметь знак (поведение по умолчанию); Или отрицательные числа имеют отрицательный знак, в то время как положительные результаты префиксируются ведущим пространством. Эти примеры показаны в коде ниже…
>>> '{:+g}; {:+g}'.format(100, -50) '+100; -50' // All numbers have a relevant sign >>> '{:-g}; {:-g}'.format(100, -50) '100; -50' // Only negative numbers have a sign >>> '{: g}; {: g}'.format(100, -50) ' 100; -50' // Positive numbers have a leading space
Варианты исчерпывают, и я бы посоветовал вам взглянуть на Spec для полного диапазона.
Решение
Решение нашей проблемы просто. Мы следуем идентификатору спецификации формата (толстой кишки) с другим из многих вариантов мини-языка формата-спецификации-запятая (см. PEP 378 – Спецификатор формата для тысяч разделителя )
for name, info in countries.items(): print( f"\n{name.title()}'s capital city is {info['capital'].title()}. " f"{name.title()} has a population of around " f"{'{:,}'.format(info['population'])}." )
Запуск этого кода создает идеально отформатированную информацию, которую наши пользователи могут легко прочитать…
Scotland's capital city is Edinburgh. Scotland has a population of around 5,438,000. Belgium's capital city is Brussels. Belgium has a population of around 11,250,000. Germany's capital city is Berlin. Germany has a population of around 82,665,600.
(Обратите внимание, что мы могли бы точно воспроизвести наш код, используя подчеркивание вместо запятой после идентификатора спецификации формата.)
Оригинал: “https://dev.to/marktripney/formatting-large-numbers-in-python-1kf8”