###Введение
Метод str.format()
класса строки в Python позволяет выполнять подстановки переменных и форматирование значений. Это позволяет вам объединять элементы в строке с помощью позиционного форматирования.
В этом руководстве будет рассмотрено некоторые общие примеры использования форматеров в Python, которые могут помочь сделать ваш код и программу более читаемыми и удобными для пользователя.
Предварительные требования
У вас должен быть установлен Python 3 и настроена среда программирования на вашем компьютере или сервере. Если у вас нет настроенной среды программирования, вы можете обратиться к руководствам по установке и настройке для локальной среды программирования или для среды программирования на вашем сервере, подходящей для вашей операционной системы (Ubuntu, CentOS, Debian и т. д.)
##Использование форматеров
Форматировщики работают, вставляя одно или несколько поля замены или заполнители — определенные парой фигурных скобок {}
— в строку и вызывая метод str.format()
. Вы передадите в метод значение, которое вы хотите объединить со строкой. Это значение будет передано в том же месте, где находится ваш заполнитель, когда вы запускаете программу.
Давайте напечатаем строку, использующую форматировщик:
Инфо: Для выполнения примеров в этом учебнике откройте интерактивную оболочку Python на своей локальной системе, запустив команду python3
. Затем вы можете копировать, вставлять или редактировать примеры, добавляя их после приглашения >>>
.
OutputSammy has 5 balloons.
В приведенном выше примере мы сконструировали строку с парой фигурных скобок в качестве заполнителя:
Затем мы добавили метод str.format()
и передали значение целого числа 5
в этот метод. Это помещает значение 5
в строку там, где находились фигурные скобки:
Sammy has 5 balloons.
Мы также можем присвоить переменной значение строки с заполнителями форматировщика:
OutputSammy loves open source.
В этом втором примере мы объединили строку "open source"
с более крупной строкой, заменив фигурные скобки в исходной строке.
Форматировщики в Python позволяют использовать фигурные скобки в качестве заполнителей для значений, которые вы передадите с помощью метода str.format()
.
##Использование форматировщиков с несколькими заполнителями
Можно использовать несколько пар фигурных скобок при использовании форматирования. Если мы хотим добавить еще одну переменную замены в предложение выше, мы можем сделать это, добавив вторую пару фигурных скобок и передавая в метод второе значение:
OutputSammy loves open-source software.
Чтобы добавить еще одну подстановку, мы добавили в оригинальную строку вторую пару фигурных скобок. Затем мы передали две строки в метод str.format()
, разделив их запятой.
Следуя тому же синтаксису, мы можем добавить дополнительные подстановки:
OutputSammy loves open-source software, and has 5 balloons.
В sammy_string
мы добавили 4 пары фигурных скобок в качестве заполнителей для подстановки переменных. Затем мы передали 4 значения в метод str.format()
, смешивая строковые и целочисленные типы данных. Каждое из этих значений разделено запятой.
## Переупорядочивание форматов с позиционными и именованными аргументами
Когда мы оставляем фигурные скобки пустыми без параметров, Python заменяет значения, переданные через метод str.format()
, по порядку. Как мы видели, до сих пор, конструкция форматтера с двумя пустыми фигурными скобками с двумя значениями, переданными, будет выглядеть так:
OutputSammy the shark has a pet pilot fish!
Первая пара фигурных скобок заменяется строковым значением "shark"
, а вторая пара заменяется строковым значением "pilot fish"
.
Значения, которые существуют внутри метода, выглядят так:
Они в основном представляют собой тип данных кортеж , и каждое отдельное значение, содержащееся в кортеже, можно вызвать по его индексному номеру, который начинается с индексного номера 0.
Мы можем передавать эти индексные номера в фигурные скобки, которые служат заполнителями в исходной строке:
В приведенном выше примере вывод будет таким же, как если бы мы не передавали индексные номера в фигурные скобки, так как мы вызываем значения в кортеже по порядку:
OutputSammy the shark has a pet pilot fish!
Но если мы изменяем порядок индексных номеров с параметрами заполнителей, мы можем изменить порядок значений, передаваемых в строку:
OutputSammy the pilot fish has a pet shark!
Если вы вызываете индексный номер 2 в кортеже, в котором значения находятся на позициях индексов 0 и 1, то вы обращаетесь к значению, которое находится вне диапазона. Когда вы обращаетесь к индексному номеру, который находится вне диапазона, вы получите сообщение об ошибке:
OutputIndexError: tuple index out of range
Сообщение об ошибке, которое мы видим, относится к тому, что в кортеже есть значения только с индексными номерами 0 и 1, поэтому индексный номер 2 находится вне диапазона.
Давайте добавим еще несколько заполнителей и несколько значений, чтобы мы могли лучше понять, как мы можем переупорядочить форматтеры. Вот новая строка с четырьмя заполнителями:
OutputSammy is a happy, smiling and blue shark!
Без параметров значения, которые передаются в метод str.format()
, конкатенируются в строку по порядку.
Строковые значения, содержащиеся в кортеже, соответствуют следующим индексным номерам:
“happy” | “smiling” | “blue” | “shark” |
---|---|---|---|
0 | 1 | 2 | 3 |
Давайте использовать индексные номера значений, чтобы изменить порядок их появления в строке:
OutputSammy is a shark, blue, and smiling happy!
Поскольку мы начали с индекса номер 3, мы сначала вызвали последнее значение "shark"
. Другие индексные номера, включенные в качестве параметров, изменяют порядок появления слов внутри исходной строки.
Помимо позиционных аргументов, мы также можем ввести именованные аргументы, которые вызываются по их ключевому имени:
OutputSammy the shark made a pull request.
Этот пример демонстрирует использование именованного аргумента с позиционными аргументами. Мы можем заполнить именованный аргумент pr
вместе с позиционными аргументами и перемещать эти аргументы, чтобы изменить результирующую строку:
OutputSammy the pull request made a shark.
Позиционные и именованные аргументы, используемые с форматировщиками строк, дают нам больше контроля над манипуляциями нашими исходными строками через изменение порядка.
##Указание типа
Мы можем включить больше параметров внутри фигурных скобок нашего синтаксиса. Мы будем использовать синтаксис кода формата {field_name:conversion}
, где field_name
указывает индексный номер аргумента метода str.format()
, который мы прошли в разделе о переупорядочивании, а conversion
относится к коду преобразования типа данных, который вы используете с форматировщиком.
Тип преобразования относится к односимвольному коду типа, который использует Python. Коды, которые мы будем использовать здесь, – s
для строк, d
для отображения десятичных целых чисел (10-ное основание), и f
, который мы будем использовать для отображения чисел с плавающей точкой с десятичными разрядами. Вы можете узнать больше о Мини-языке спецификации формата через официальную документацию Python 3.
Давайте рассмотрим пример, где целое число передается через метод, но мы хотим отобразить его как число с плавающей точкой, добавив аргумент типа преобразования f
:
OutputSammy ate 75.000000 percent of a pizza!
Мы использовали синтаксис {field_name:conversion}
для первого замещаемого поля в фигурных скобках, чтобы вывести число с плавающей точкой. Вторые фигурные скобки используют только первый параметр {field_name}
.
В приведенном выше примере отображается много чисел после десятичной точки, но их можно ограничить. Когда вы указываете f
для значений с плавающей точкой, вы также можете указать точность этого значения, добавив точку .
, за которой следует количество цифр после десятичной точки, которые вы хотели бы включить.
Если Сэмми съел 75,765367% пиццы, но нам не нужна высокая точность, мы можем ограничить количество знаков после десятичной точки до 3, добавив .3
перед типом преобразования f
:
OutputSammy ate 75.765 percent of a pizza!
Если мы хотим только один знак после десятичной точки, мы можем переписать строку и метод следующим образом:
OutputSammy ate 75.8 percent of a pizza!
Обратите внимание, что изменение точности приведет к округлению числа.
Хотя мы отображаем число без десятичных знаков как float, если мы попробуем изменить float на целое число, используя тип преобразования d
, мы получим ошибку:
OutputValueError: Unknown format code 'd' for object of type 'float'
Если вы хотите, чтобы не отображались десятичные знаки, вы можете написать свой форматтер следующим образом:
OutputSammy ate 76 percent of a pizza!
Это не преобразует ваше float в целое число, а ограничит количество отображаемых знаков после десятичной точки.
## Подстановки переменных с отступом
Поскольку заполнители являются полями замены, вы можете выровнять или создать пробел вокруг элемента, увеличивая размер поля с помощью дополнительных параметров. Это может быть полезно, когда нам нужно визуально организовать большое количество данных.
Мы можем добавить число для указания размера поля (в символах) после двоеточия :
в фигурных скобках нашего синтаксиса:
OutputSammy has 5 red balloons !
В приведенном выше примере мы дали числу 5
размер поля символов 4, а строке balloons
размер поля символов 16 (потому что это длинная строка).
Как видим, по умолчанию строки выравниваются по левому краю в пределах поля, а числа – по правому краю. Вы можете изменить это, разместив код выравнивания после двоеточия. <
будет выравнивать текст в поле по левому краю, ^
– по центру, а >
– по правому краю.
Давайте выровняем число по левому краю и центрируем строку:
OutputSammy has 5 red balloons !
Теперь мы видим, что 5
выровнен по левому краю, обеспечивая пространство в поле перед красный
, а воздушные шары
центрированы в своем поле с пробелами слева и справа от него.
По умолчанию, когда мы увеличиваем поле с помощью форматтеров, Python заполняет поле символами пробела. Мы можем изменить это, указав другой символ, который мы хотим использовать, непосредственно после двоеточия:
Output*******Sammy********
Мы принимаем строку, передаваемую в str.format()
, на позиции индекса 0, так как мы не указали иное, включая двоеточие, и указываем, что мы будем использовать *
вместо пробела для заполнения поля. Мы центрируем строку с помощью ^
, указываем, что поле имеет размер 20 символов, и также указываем, что мы работаем с типом преобразования строки, включив s
.
Мы можем объединить эти параметры с другими параметрами, которые мы использовали ранее:
OutputSammy ate 76 percent of a pizza!
В параметрах в фигурных скобках мы указали индексное поле числа с плавающей запятой и включили двоеточие, указали размер номера поля и включили точку, написали количество знаков после десятичной точки, а затем указали тип преобразования f
.
##Использование переменных
До сих пор мы передавали целые числа, числа с плавающей запятой и строки в метод str.format()
, но мы также можем передавать переменные через метод. Это работает так же, как и любая другая переменная.
OutputSammy has 8 balloons today!
Мы можем использовать переменные как для исходной строки, так и для того, что передается в метод:
OutputSammy has 8 balloons today!
Переменные можно легко заменить для каждой части нашей синтаксической конструкции форматирования. Это упрощает работу, когда мы принимаем ввод, сгенерированный пользователем, и присваиваем эти значения переменным.
## Использование форматеров для организации данных
Форматеры можно рассматривать в наилучшем свете, когда они используются для организации большого объема данных в визуальной форме. Если мы показываем базы данных пользователям, использование форматеров для увеличения размера поля и изменения выравнивания может сделать ваш вывод более читаемым.
Давайте посмотрим на типичный цикл for на Python, который будет выводить i
, i*i
и i*i*i
в диапазоне от 3 до 12:
Output3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728
Хотя вывод организован, числа переполняются в колонки друг друга, что делает нижнюю часть вывода менее читаемой. Если вы работаете с большим набором данных с множеством маленьких и больших чисел, это может вызвать проблемы.
Давайте используем форматеры, чтобы дать больше места для этих чисел:
Здесь, в фигурных скобках, мы не добавили имя поля для номера индекса и начали с двоеточия, за которым следует число для размера поля, а также тип преобразования d
, поскольку мы работаем с целыми числами. В этом примере мы учли размер каждого ожидаемого вывода, предоставив 2 дополнительных символьных пространства для каждого, в зависимости от максимально возможного размера числа, поэтому наш вывод выглядит так:
Output 3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728
Мы можем указать одинаковое число размера поля, чтобы иметь равные столбцы, убедившись, что мы учитываем более крупные числа:
Output 3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728
Мы также можем управлять выравниванием столбцов, добавляя <
, ^
и >
для выравнивания текста, изменяя d
на f
для добавления десятичных знаков, изменяя индексы имен полей и многое другое, чтобы убедиться, что мы отображаем данные так, как хотим.
## Заключение
Использование форматеров для подстановки переменных может быть эффективным способом объединения строк и организации значений и данных. Форматеры представляют собой базовый, но недескриптивный способ передачи переменных в строку и полезны для обеспечения удобочитаемого и пользовательски понятного вывода.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-string-formatters-in-python-3