Как отформатировать строку в Python

При работе с Python у вас постоянно будет возникать необходимость отформатировать строку. Каждую переменную, кортеж, словарь или логику, которую мы определяем, рано или поздно придется либо вывести в консоль, либо ещё как-то отобразить. А для всего этого output нужно сперва преобразовать в строку.

Возможно, вы уже использовали функцию str() и работали со строковыми литералами. Но часто нужно нечто большее.

В этой статье мы рассмотрим, какие есть способы форматирования строк в Python 3.

Как отформатировать строку с помощью конкатенации: print(‘Hello’+name)

Это самый простой и, следовательно, самый легкий способ, с которого и можно начать. Он также отлично подойдет тем, кто только начал программировать.

Последовательное соединение частей через оператор + облегчает понимание. Всё становится ясно даже без каких-либо предварительных знаний о написании кода.

name = 'YoungWonks'
year = 2014

string = 'Hello, ' + name
print(string)

string = name + ' was started in ' + str(year)
print(string)

Запустим наш код и получим следующий результат:

Hello, YoungWonks 
YoungWonks was started in 2014

Мы создали отформатированные строки путем объединения переменных при помощи оператора сложения.

Следует иметь в виду, что для такого форматирования нам нужно будет преобразовать все переменные в строки.

Примечание редакции Pythonist. Рекомендуем почитать статью о приведении типов — «Преобразование типов данных в Python 3».

В нашем примере переменная name уже является строкой, но year – целое число. Поэтому мы применяем функцию str(), чтобы преобразовать year в строку. Только после этого мы можем воспользоваться конкатенацией.

Как отформатировать строку «по-старому»: print ‘Hello %s’ % name

Этот подход чаще использовался в Python 2, когда язык был еще молод и развивался. Его легко понять опытным разработчикам, имеющим опыт программирования на языке C.

Для форматирования строки этим методом мы определяем плейсхолдер с указанием типа данных и аргументом (или аргументами) в конце предложения. Подобный метод используется в языке C (да и в других языках тоже).

name = 'YoungWonks'
year = 2014

string = 'Hello, %s ' % name
print(string)

string = '%s was started in %d' % (name, year)
print(string)

Результат будет таким:

Hello, YoungWonks 
YoungWonks was started in 2014

В этом примере мы определяем переменные, которые хотим отформатировать в строки. Затем мы создаем строку с плейсхолдерами для этих для переменных.

Имейте в виду, что плейсхолдеры должны соответствовать типам соответствующих переменных. Привязка переменных к плейсхолдерам осуществляется при помощи символа % в конце предложения.

[python_ad_block]

Форматирование строк в Python с помощью .format()

Это метод многие Python-разработчики считают глотком свежего воздуха, поскольку он значительно облегчает жизнь.

Этот способ форматирования был представлен в раннем Python 3. По сути, новый синтаксис удалил символы %. Вместо них он предоставил .format() в качестве строкового метода. Этот метод принимает позиционные аргументы для вставки в места, определенные фигурными скобками.

Аргументы могут быть и именованными, но порой это кажется излишне многословным.

С помощью метода str.format() вы можете сделать больше, чем просто вставить значение переменной в строку. Например, можно указать точность, округление и заполнение нулями. В этой статье мы сосредоточимся только на базовом использовании.

name = 'YoungWonks'
year = 2014

string = '{} was started in {}'.format(name, year)
print(string)

string = '{0} was started in {1}'.format(name, year)
print(string)

yw = {'name': 'YoungWonks', 'year': 2014}
string = "{name} was started in {year}.".format(name=yw['name'], year=yw['year'])
print(string)

Запустим наш код и получим следующее:

YoungWonks was started in 2014
YoungWonks was started in 2014
YoungWonks was started in 2014

В этом примере мы сначала создаем переменные, которые будем потом форматировать. В самом простом варианте мы используем фигурные скобки {} в качестве плейсхолдеров для наших переменных. Затем мы применяем метод format() к строке и указываем переменные как упорядоченный набор параметров.

Во второй части нашего примера в плейсхолдерах используются индексы упорядоченных параметров.

В третьей части показано, как при форматировании строки можно использовать словарь, а также именованные параметры в методе format().

Как отформатировать строку с помощью f-строк

F-строки (сокращение от format string) – это новейший метод из поддерживаемых Python 3, поэтому он быстро набирает популярность.

f-строки похожи на метод .format(). Однако они предоставляют более ёмкий способ сделать то же самое, всего лишь добавив к строке букву f в качестве префикса. Этот подход взял самое лучшее из двух других техник:

  1. Последовательный порядок из метода конкатенации
  2. Модульность метода .format()

Благодаря этим достоинствам все больше и больше разработчиков используют именно этот метод. Кроме того, этот подход легко освоить. Так что, если вы еще новичок в программировании, то f-строки однозначно для вас.

name = 'YoungWonks'
year = 2014
string = f'{name} was started in {year}'
print(string)

string = f'{name} was started in {2013 + 1}.'
print(string)

yw = {'name': 'YoungWonks', 'year': 2014}
string = f"{yw['name']} was started in {yw['year']}."
print(string)

# YoungWonks was started in 2014 
# YoungWonks was started in 2014.
# YoungWonks was started in 2014.

Как вы уже могли заметить, приведенный выше пример похож на метод .format(). Здесь мы тоже используем фигурные скобки {} для плейсхолдеров в строках, но при этом указываем переменные непосредственно внутри плейсхолдеров.

Этот метод работает, когда мы используем строчную букву f в начале строки. F-строки также можно применять с другими типами данных, такими как словари.

Нужно ли знать и использовать все эти методы форматирования строк?

При изучении Python стоит познакомиться со всеми способами форматирования строк.

Например, сами вы вряд ли будете часто пользоваться старым методом форматирования. Но вам наверняка встретятся посты и сообщения на старых форумах и на Stack Overflow, где использовался именно этот метод. Кроме того, старый стиль форматирования строк все еще используется во многих старых библиотеках машинного обучения. Поэтому знание старого метода форматирования будет безусловно полезным.

Из трех других методов, которые мы обсуждали здесь, вы можете использовать любой. Просто выберите, какой из них лучше подходит по контексту (или просто больше вам понравился).

Конкатенация (знак +) полезна при работе с простыми и быстрыми операторами. Вы также можете использовать ее для отладки при разработке простого проекта.

Например, если бы мы делали простую игру по угадыванию чисел, мы могли бы использовать конкатенацию, как показано ниже:

import random
random_number = random.randint(1,100)
user_guess = None
while True:
	print('Please guess the number between 1 and 100 : ')
    user_guess = int(input())
    if user_guess == random_number:
    	print('Correct!')
    else:
    	print("Try Again!")
        
    #prints for debugging
    print("Random Number: "+ str(random_number))
    print("User Guess: "+ str(user_guess))

Операторы print, использованные в этом коде для отладки, не останутся в окончательном варианте программы. (Вы же не хотите выдавать число, которое нужно угадать, не так ли?). Так что при работе над кодом вы смело можете использовать конкатенацию в своих print.

При добавлении логирования можно отдать предпочтение методу format() или f-строкам, поскольку они сделают ваши операторы более модульными. Также будет проще указать точность/форматирование для самого типа данных.

Есть ли в Python какие-либо другие методы форматирования строк?

Да! Например, шаблонные строки. Они предоставляются как класс в модуле string стандартной библиотеки Python. Вы импортируете модуль и используете метод .substitute() для замены плейсхолдеров.

Заключение

Умение отформатировать строку – важный навык, который должен быть в арсенале каждого Python-разработчика.

Из четырех способов форматирования строк, разобранных в этой статье, метод f-строк с наибольшей вероятностью останется с нами надолго. То же можно сказать о .format() и конкатенации. А вот синтаксис Python 2 постепенно уходит в прошлое, поскольку большинство старых библиотек начинают поддерживать Python 3.

Перевод статьи «How to Format a String in Python».