Введение
Добро пожаловать в лабораторную работу по форматированию строк в Python. Правильное форматирование строк является фундаментальной задачей в любом языке программирования, используемой для всего: от простых операторов print до генерации сложных отчетов и веб-страниц. Python предлагает несколько способов форматирования строк, каждый из которых имеет свои преимущества и сценарии использования.
В этой лабораторной работе вы изучите эволюцию форматирования строк в Python. Вы начнете с традиционного оператора %, затем перейдете к более гибкому методу str.format(). Вы также освоите f-строки (f-Strings) — современный и рекомендуемый подход, представленный в Python 3.6, — и научитесь эффективно форматировать числа. Наконец, вы откроете для себя строки Template (Template strings) — безопасный вариант для работы с шаблонами из недоверенных источников.
К концу этой лабораторной работы вы получите всестороннее представление о том, как выбирать и использовать подходящий метод форматирования строк для ваших проектов на Python.
Использование оператора %
На этом шаге вы узнаете о форматировании строк старого стиля с использованием оператора %. Этот метод, унаследованный от функции printf в C, использует спецификаторы формата, такие как %s для строк и %d для целых чисел, для вставки значений в строку.
Хотя этот метод работает, он имеет некоторые особенности и менее гибок, чем современные альтернативы. Для нового кода настоятельно рекомендуется использовать f-строки (f-Strings) или метод str.format().
Примечание: Если вы не знакомы с использованием WebIDE (похожего на VS Code), пожалуйста, изучите это в этой лаборатории.
Сначала откройте файл step1.py в проводнике файлов слева.
Теперь добавьте следующий код в step1.py, чтобы увидеть, как форматировать строку и целое число.
## Оператор %: форматирование строк старого стиля (не рекомендуется для нового кода)
name = 'Pete'
print('Hello %s' % name) ## %s = заполнитель для строки
num = 5
print('I have %d apples' % num) ## %d = заполнитель для целого числа
Сохраните файл и запустите его из терминала, чтобы увидеть вывод.
python3 step1.py
Вы должны увидеть следующий вывод, где %s был заменен значением name, а %d — значением num.
Hello Pete
I have 5 apples
Использование str.format
На этом шаге вы изучите метод str.format(), который был представлен в Python 3 (и обратно портирован в 2.7) как более мощный и гибкий способ форматирования строк. Этот метод использует фигурные скобки {} в качестве заполнителей (placeholders).
Вы можете передавать аргументы в format(), и они будут вставлены в заполнители по порядку. Вы также можете использовать числа внутри скобок для обращения к аргументам по их позиции.
Откройте файл step2.py в проводнике файлов.
Добавьте следующий код в step2.py. Первый пример использует пустые фигурные скобки, а второй — позиционные аргументы.
## str.format() method: modern string formatting (Python 2.7+)
name = 'John'
age = 20
## Аргументы вставляются по порядку
print("Hello I'm {}, my age is {}".format(name, age))
## Аргументы вставляются на основе позиции
print("Hello I'm {0}, my age is {1}".format(name, age))
Сохраните файл и выполните его в терминале.
python3 step2.py
Оба оператора print дадут одинаковый результат, демонстрируя два способа использования str.format().
Hello I'm John, my age is 20
Hello I'm John, my age is 20
Форматированные строковые литералы или f-строки (f-Strings)
На этом шаге вы освоите f-строки (f-Strings) — рекомендуемый способ форматирования строк в Python 3.6 и более новых версиях. f-Строка — это строковый литерал, которому предшествует префикс f или F. Эти строки позволяют встраивать выражения Python непосредственно внутрь себя, заключая их в фигурные скобки {}.
f-строки вычисляются во время выполнения (runtime), что делает их не только лаконичными и читаемыми, но и очень мощными.
Откройте файл step3.py в проводнике файлов.
Базовый синтаксис и выражения
Сначала рассмотрим базовый синтаксис и то, как встраивать выражения. Добавьте следующий код в step3.py.
## f-string: рекомендуемый способ форматирования строк (Python 3.6+)
name = 'Elizabeth'
print(f'Hello {name}!') ## Префикс f позволяет использовать выражения в {}
## f-строки поддерживают выражения: можно включать вычисления внутри {}
a = 5
b = 10
print(f'Five plus ten is {a + b} and not {2 * (a + b)}.')
Многострочные f-строки
Вы также можете создавать многострочные строки, заключая f-строку в круглые скобки. Добавьте этот пример в step3.py.
name = 'Robert'
messages = 12
multiline_string = (
f'Hi, {name}. '
f'You have {messages} unread messages'
)
print(multiline_string)
Спецификатор = для отладки (Debugging)
Начиная с Python 3.8, вы можете использовать спецификатор = для автоматической печати как самого выражения, так и его значения, что очень полезно для отладки. Добавьте этот последний фрагмент кода в step3.py.
## Спецификатор =: печатает и имя переменной, и ее значение (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
print(f'date and time: {now=}')
Теперь сохраните файл и запустите его из терминала.
python3 step3.py
Вы увидите вывод всех трех примеров. Обратите внимание, что дата и время в вашем выводе будут отличаться.
Hello Elizabeth!
Five plus ten is 15 and not 30.
Hi, Robert. You have 12 unread messages
date and time: now='...'
Форматирование чисел (Digits)
На этом шаге вы узнаете, как форматировать числовые данные внутри f-строк. Это мощная функция для представления данных в удобочитаемом формате. Мы рассмотрим добавление разделителей тысяч, округление чисел с плавающей запятой и отображение чисел в виде процентов.
Откройте файл step4.py в проводнике файлов.
Добавьте следующий код в step4.py, чтобы попрактиковаться в различных методах форматирования чисел.
## Добавление разделителя тысяч
a = 10000000
print(f"Number with separators: {a:,}")
## Округление числа с плавающей запятой до 2 знаков после запятой
b = 3.1415926
print(f"Rounded number: {b:.2f}")
## Отображение числа в виде процента с 2 знаками после запятой
c = 0.816562
print(f"As a percentage: {c:.2%}")
Каждый спецификатор формата следует за двоеточием : внутри фигурных скобок.
:,добавляет запятую в качестве разделителя тысяч.:.2fформатирует число как число с плавающей запятой с двумя знаками после запятой.:.2%умножает число на 100 и отображает его в виде процента с двумя знаками после запятой.
Сохраните файл и запустите его из терминала.
python3 step4.py
Ваш вывод должен выглядеть следующим образом:
Number with separators: 10,000,000
Rounded number: 3.14
As a percentage: 81.66%
Для справки ниже приведена таблица с дополнительными опциями форматирования чисел, доступными в f-строках:
| Число | Формат | Вывод | Описание |
|---|---|---|---|
| 3.1415926 | {:.2f} |
3.14 | Формат числа с плавающей запятой, 2 знака после запятой |
| 1000000 | {:,} |
1,000,000 | Формат числа с разделителем-запятой |
| 0.35 | {:.2%} |
35.00% | Формат процента |
| 1000000000 | {:.2e} |
1.00e+09 | Экспоненциальная нотация |
Использование строковых шаблонов (Template Strings)
На этом шаге вы узнаете о строковых шаблонах (Template) из встроенного модуля Python string. Хотя они менее мощные, чем f-строки, они являются более безопасным выбором при работе с шаблонами строк, которые могут быть сгенерированы пользователями. Их пониженная сложность предотвращает выполнение произвольного кода, что может представлять угрозу безопасности при использовании таких методов, как str.format(), если применять их неосторожно.
Строковые шаблоны используют знаки доллара $ для обозначения заполнителей (например, $name).
Откройте файл step5.py в проводнике файлов.
Добавьте следующий код в step5.py. Вам потребуется импортировать класс Template, создать объект шаблона, а затем использовать метод substitute(), чтобы вставить значения.
from string import Template
name = 'Elizabeth'
## Создание объекта Template
t = Template('Hey $name!')
## Использование метода substitute() для замены заполнителя
result = t.substitute(name=name)
print(result)
Метод substitute() принимает именованные аргументы (keyword arguments), где ключи соответствуют именам заполнителей в шаблоне.
Сохраните файл и запустите его из терминала.
python3 step5.py
Вывод покажет подставленную строку.
Hey Elizabeth!
Резюме
Поздравляем с завершением лабораторной работы по форматированию строк в Python!
В этой лабораторной работе вы изучили основные методы форматирования строк в Python. Вы узнали:
- Оператор
%: Старый стиль форматирования в стиле C, который больше не рекомендуется для нового кода. - Метод
str.format(): Более мощный и гибкий метод, использующий заполнители{}. - f-Строки (f-Strings): Современный, лаконичный и настоятельно рекомендуемый подход для Python 3.6+, который позволяет встраивать выражения непосредственно в строки.
- Форматирование чисел: Как использовать спецификаторы формата внутри f-строк для управления представлением чисел, включая разделители, точность и проценты.
- Строки
Template: Более простой и безопасный механизм для подстановки строк, идеально подходящий для работы с шаблонами из внешних или недоверенных источников.
Понимая сильные и слабые стороны каждого метода, вы теперь можете выбрать наиболее подходящий инструмент для любой задачи форматирования строк, с которой вы столкнетесь в своем пути программирования на Python.



