- Как подставить переменную в строку
- Как не надо
- .format cо строковыми литералами
- Сложение
- replace
- Как ещё можно
- Попробуйте бесплатные уроки по Python
- Форматирование строк. Оператор %
- Форматирование строк с помощью оператора %
- Лучшие примеры форматирования строк в Python
- #1 Форматирование строк “По старинке” (оператор %)
- #2 Форматирование строк “По новому” (str.format)
- #3 Интерполяция строк / f-Строки (Python 3.6+)
Как подставить переменную в строку
В Python есть шесть способов подставить переменную в строку. Не все из них социально приемлемые. Если коротко, то преподаватель точно не завернёт работу, использующую .format :
person1 = 'Александра' person2 = 'Александр' message_template = """Здравствуйте, ! На связи . . С уважением, """ message = message_template.format(recipient=person1, sender=person2) print(message)
Как не надо
.format cо строковыми литералами
Выносить в параметры .format нужно только изменяющиеся данные. Не стоит писать
message_template = " " message = message_template.format( greeting='Здравствуйте', comma=',', recipient='Александра', exclamation_point='!' ) print(message)
Параметры comma и exclamation_point всегда будут равны запятой и восклицательному знаку. Их надо делать частью шаблона:
message_template = ", !" message = message_template.format( greeting='Здравствуйте', recipient='Александра', ) print(message)
Если заранее известно, что и приветствовать мы всегда будем словом “Здравствуйте”, оно тоже станет частью шаблона:
message_template = "Здравствуйте, !" message = message_template.format(recipient='Александра') print(message)
Сложение
Как было упомянуто в статье про арифметические операции над строками, их лучше избегать:
person1 = 'Александра' person2 = 'Александр' message = """Здравствуйте, """ + person1 + """! На связи """ + person2 + """. . С уважением, """ + person2 print(message)
Такие строки трудно читать и изменять.
replace
person1 = 'Александра' person2 = 'Александр' message_template = """Здравствуйте, ! На связи . . С уважением, """ message = message_template.replace('', person1) message = message.replace('', person2) print(message)
В сущности аналогичен .format , но менять количество и название переменных уже труднее. А ещё .format умеет, например, выравнивать строки, а replace так не может.
Как ещё можно
В моменты, когда нужно форматирование строки в стиле printf (функции из популярного системного языка C), используют оператор %.
Начиная с версии 3.6 в Python появились f-строки — более удобная замена .format .
С особо редких случаях прибегают к Template Strings.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Форматирование строк. Оператор %
Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.). Подстановку данных можно сделать с помощью форматирования строк. Форматирование можно сделать с помощью оператора %, и метода format.
Метод format является наиболее правильным, но часто можно встретить программный код с форматированием строк в форме оператора %.
Форматирование строк с помощью оператора %
Если для подстановки требуется только один аргумент, то значение — сам аргумент:
А если несколько, то значением будет являться кортеж со строками подстановки:
Теперь, а почему я пишу то %d, то %s? А всё зависит от того, что мы используем в качестве подстановки и что мы хотим получить в итоге.
Формат | Что получится |
‘%d’, ‘%i’, ‘%u’ | Десятичное число. |
‘%o’ | Число в восьмеричной системе счисления. |
‘%x’ | Число в шестнадцатеричной системе счисления (буквы в нижнем регистре). |
‘%X’ | Число в шестнадцатеричной системе счисления (буквы в верхнем регистре). |
‘%e’ | Число с плавающей точкой с экспонентой (экспонента в нижнем регистре). |
‘%E’ | Число с плавающей точкой с экспонентой (экспонента в верхнем регистре). |
‘%f’, ‘%F’ | Число с плавающей точкой (обычный формат). |
‘%g’ | Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре), если она меньше, чем -4 или точности, иначе обычный формат. |
‘%G’ | Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре), если она меньше, чем -4 или точности, иначе обычный формат. |
‘%c’ | Символ (строка из одного символа или число — код символа). |
‘%r’ | Строка (литерал python). |
‘%s’ | Строка (как обычно воспринимается пользователем). |
‘%%’ | Знак ‘%’. |
Спецификаторы преобразования записываются в следующем порядке:
- %.
- Ключ (опционально), определяет, какой аргумент из значения будет подставляться.
- Флаги преобразования.
- Минимальная ширина поля. Если *, значение берётся из кортежа.
- Точность, начинается с ‘.’, затем — желаемая точность.
- Модификатор длины (опционально).
- Тип (см. таблицу выше).
Флаг | Значение |
«#» | Значение будет использовать альтернативную форму. |
«0» | Свободное место будет заполнено нулями. |
«-« | Свободное место будет заполнено пробелами справа. |
» « | Свободное место будет заполнено пробелами справа. |
«+» | Свободное место будет заполнено пробелами слева. |
Для вставки кода на Python в комментарий заключайте его в теги
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
Лучшие примеры форматирования строк в Python
В данной статье мы рассмотрим четыре основных подхода в форматировании строк в Python, а также их сильные и слабые стороны. Вы также узнаете простое эмпирическое правило подбора лучшего подхода форматирования для строки общего назначения для вашей программы.
Помните Дзен Python, где должен быть “один очевидный способ сделать что-то в Python”? Можете почесать голову перед тем, как понять, что зачастую есть целых 4 эффективных способа выполнить форматирование строк в Python.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Давайте приступим к делу, работы много! Чтобы иметь в распоряжении простой пример для эксперимента, представим, что у вас есть следующие переменные (или константы, не важно) для работы:
Основываясь на этих переменных, вы хотите создать строку вывода, содержащую простое уведомление об ошибке:
Эта ошибка может немного подпортить понедельник вашему разрабу… Но мы здесь за тем, чтобы обсудить форматирование строк. Так что приступим к делу.
#1 Форматирование строк “По старинке” (оператор %)
Строки в Python содержат уникальную встроенную операцию, доступ к которой можно получить через оператор %. Это позволяет заметно упростить позиционное форматирование. Если вы когда-либо работали с функцией printf в С, вы сразу узнаете, как это работает. Вот простой пример:
Я использую определитель формата %s в данном случае, чтобы сказать Python, где именно заменить значение имени, представленного в виде строки.
Существуют другие определители формата, которые позволяют вам контролировать формат выдачи. Например, возможно конвертировать числа в шестнадцатеричную нотацию или добавлять пробелы для создания хорошо отформатированных таблиц и отчетов. (См Python Docs: ““printf-style String Formatting”.)
Здесь, вы можете использовать определитель формата %x для конвертации значения int в строку и представить его в качестве шестнадцатеричного числа:
“По старинке”, синтаксис форматирования строки немного меняется, если вы хотите сделать несколько замен в одной строке. Так как оператор % принимает только один аргумент, вам нужно обернуть правую часть в кортеж, вот так:
Также возможно сослаться на заменители переменных по имени в вашей строке формата, если вы передадите сопоставление оператору %:
Это помогает сделать настройки вашего формата более простым процессом, а также упрощает его модификацию в будущем. Вам не нужно беспокоиться о том, что порядок, который вы передаете в значениях, совпадает с порядком, в котором значения указаны в строке формата. Конечно, недостаток — это то, что эта техника требует немного больше ручного ввода.
Я уверен, что вы думаете, почему это printf форматирование считается старым форматированием строк. Технически, оно было заменено новым подходом к форматированию в “Python 3”, которое мы сейчас и рассмотрим!
#2 Форматирование строк “По новому” (str.format)
Python 3 предоставил новый способ форматирования, который также был внесен в раннюю версию Python 2.7. Этот “новый стиль” форматирования строк избавляется от специального синтаксиса оператора % и делает синтаксис для форматирования строк более регулярным. Теперь форматирование обрабатывается вызовом .format() в объекте строки.
Вы можете использовать format(), чтобы выполнить простое позиционное форматирование, также, как мы делали это по старинке:
Или, вы можете сослаться на свои подстановки переменных по имени, и использовать их в том порядке, в котором вам хочется. Это достаточно мощный способ, так как он позволяет повторно упорядочить порядок отображения без изменения переданных функции format() аргументов:
Это также демонстрирует, что синтаксис формата переменной int — это шестнадцатеричная измененная строка. Теперь вам нужно передать формат spec, внеся суффикс :x. Синтаксис формата строки стал более сильным, не усложняя при этом более простые варианты использования. Не лишним будет ознакомиться с этим мини-языком форматирования строк в документации Python.
В Python 3, этот “новый стиль” форматирования строк более предпочитаем, чем форматирование с оператором %. Хотя метод по старинке и остался в стороне, он не устарел. Он все еще поддерживается последними версиями Python. Согласно этой переписке разработчиков Python и связанной с этим проблемой поисков багов у разработчиков, форматирование с оператором % будет поддерживаться еще долго.
Однако, официальная документация Python 3 не делает явных рекомендаций по использованию старого форматирования:
“Упомянутые операции форматирования демонстрируют ряд неувязок, которые могут привести к распространенным ошибкам (таким, как неспособность правильно отображать кортежи и словари). Использовать новые литералы форматирования строк или интерфейс str.format() помогает избежать этих ошибок. Эти альтернативы также предоставляют более сильные, гибкие и расширяемые подходы в форматировании текста.”
По этому я лично пытаюсь работать str.format при продвижении нового кода. Начав с Python 3.6, есть еще один способ форматирования ваших строк. Рассмотрим его в следующем разделе!
#3 Интерполяция строк / f-Строки (Python 3.6+)
Python 3.6 Добавил новый подход форматирования строк под названием форматированные строчные литералы, или “f-строки”. Этот новый способ форматирования строк позволяет вам использовать встроенные выражения Python внутрь строковых констант. Вот простой, наглядный пример: