Метод format()
Хранить строки в переменных удобно, но часто бывает необходимо собирать строки из других объектов (строк, чисел и т.д.) и выполнять с ними нужные манипуляции. Для этой цели можно воспользоваться механизмом форматирования строк.
Рассмотрим следующий код:
birth_year = 1992
text = 'My name is Timur, I was born in ' + birth_year
print(text)
Такой код приводит к ошибке во время выполнения программы, поскольку мы пытаемся сложить число и строку:
TypeError: can only concatenate str (not "int") to str
Для решения такой проблемы мы можем использовать функцию str()
, которая преобразует числовое значение в строку.
Приведенный ниже код:
birth_year = 1992
text = 'My name is Timur, I was born in ' + str(birth_year)
print(text)
выводит:
My name is Timur, I was born in 1992
Такой код работает, но каждый раз преобразовывать число в строку не очень удобно. Для более наглядного форматирования мы можем использовать строковый метод format()
.
Предыдущий код можно переписать в виде:
birth_year = 1992
text = 'My name is Timur, I was born in {}'.format(birth_year)
print(text)
Мы передаем необходимые параметры методу format()
, а Python ставит их вместо фигурных скобок {}
– заполнителей. Мы можем создавать сколько угодно заполнителей.
Приведенный ниже код:
birth_year = 1992
name = 'Timur'
profession = 'math teacher'
text = 'My name is {}, I was born in {}, I work as a {}.'.format(name, birth_year, profession)
print(text)
выводит:
My name is Timur, I was born in 1992, I work as a math teacher.
Для наглядности и гибкости форматирования мы можем использовать порядковый номер в заполнителе: {0}
, {1}
, {2}
и т.д. Такой номер определяет позицию параметра, переданного методу format()
(нумерация начинается с нуля):
birth_year = 1992
name = 'Timur'
profession = 'math teacher'
text = 'My name is {0}, I was born in {1}, I work as a {2}.'.format(name, birth_year, profession)
print(text)
Параметр name
встает в заполнителе {0}
, параметр birth_year
– в заполнителе {1}
и т.д. Мы можем использовать одно и то же число в нескольких заполнителях или не использовать совсем, а также мы можем использовать числа в разном порядке.
Приведенный ниже код:
name = 'Timur'
city = 'Moscow'
text1 = 'My name is {0}-{0}-{0}!'.format(name, city)
text2 = '{1} is my city and {0} is my name!'.format(name, city)
print(text1)
print(text2)
выводит:
My name is Timur-Timur-Timur!
Moscow is my city and Timur is my name!
f-строки
Метод format()
хорошо справляется с задачей форматирования строк, однако если параметров много, то код может показаться немного избыточным.
Приведенный ниже код:
first_name = 'Taylor'
second_name = 'Swift'
country = 'USA'
birth_date = '1989/12/13'
birth_place = 'West Reading, Pennsylvania'
text = '{0} {1} is a very famous singer from the {2}. She was born on {3} in {4}.'.format(first_name, second_name, country, birth_date, birth_place)
print(text)
выводит:
Taylor Swift is a very famous singer from the USA. She was born on 1989/12/13 in West Reading, Pennsylvania.
В Python 3.6 появилась новая разновидность строк — f-строки. Если поставить перед строкой префикс f
, в заполнители можно будет включить код, например, имя переменной или любые другие выражения. f-строки обеспечивают чистый и интуитивно понятный способ форматирования строк.
Предыдущий код можно записать в виде:
first_name = 'Taylor'
last_name = 'Swift'
country = 'USA'
birth_date = '1989/12/13'
birth_place = 'West Reading, Pennsylvania'
text = f'{first_name} {last_name} is a very famous singer from the {country}. She was born on {birth_date} in {birth_place}.'
print(text)
На место заполнителя {first_name}
встает значение переменной first_name
, на место заполнителя {last_name}
встает значение переменной last_name
и т.д.
Как уже говорилось, помимо переменных в заполнителях f-строк мы можем использовать выражения.
Приведенный ниже код:
print(f'5 + 2 = {5 + 2}')
print(f'5 - 2 = {5 - 2}')
print(f'5 * 2 = {5 * 2}')
print(f'5 / 2 = {5 / 2}')
выводит:
5 + 2 = 7
5 - 2 = 3
5 * 2 = 10
5 / 2 = 2.5
Примечания
Примечание 1. Почитать подробнее про форматирование строк можно в официальной документации по ссылке. Отдельно можно почитать на английском языке про метод format()
и f-строки по ссылке и по ссылке.
Примечание 2. На русском языке можно почитать про форматирование строк по ссылке и по ссылке.
Примечание 3. Про эволюцию форматирования в Python вы можете почитать в нашем официальном блоге на Хабре по ссылке.
Примечание 4. До версии Python 3.12 повторное использование тех же кавычек, что и окружающие f-строку, вызывает ошибку синтаксиса.
Приведенный ниже код:
text = f'{'London'} is the capital of {'England'} and the {'United Kingdom'}'
приводит к возникновению ошибки:
SyntaxError: f-string: expecting '}'
В версии Python 3.12 это ограничение сняли. Обратите внимание, что на данный момент на SilverTests недоступна версия Python 3.12, и если вы копируете код из своей IDE (в которой, возможно, уже стоит Python версии 3.12 и выше), пожалуйста, проверяйте, что вы не используете повторно одни кавычки.