1.12. Форматированное представление

Python позволяет получить форматированное представление значений в виде строки. Хотя строка формата может содержать довольно сложные выражения, чаще всего используется вставка значений в строку с помощью шаблона %s.

Замечание
Python использует для строк формата такой же синтаксис, как и функция sprintf в C.

Пример 1.28. Введение в форматирование

>>> k = "uid" >>> v = "sa" >>> "%s=%s" % (k, v) 1 'uid=sa'
1 При вычислении всего выражения получается строка. Первый шаблон %s заменяется значением k, второй — значением v. Все остальные символы в строке формата (в данном случае — знак равенства) попадают в результат без изменений.

Обратите внимание, что (k, v) является кортежем. Я уже говорил, что кортежи весьма полезный тип данных.

Вы можете подумать, что здесь слишком много работы для простого объединения строк. И вы будете правы, но форматирование — это не просто объединение строк. Это даже не просто форматирование. Данная операция также выполняет приведение типа.

Пример 1.29. Форматирование vs. объединение

>>> uid = "sa" >>> pwd = "secret" >>> print pwd + " is not a good password for " + uid 1 secret is not a good password for sa >>> print "%s is not a good password for %s" % (pwd, uid) 2 secret is not a good password for sa >>> userCount = 6 >>> print "Users connected: %d" % (userCount, ) 3 4 Users connected: 6 >>> print "Users connected: " + userCount 5 Traceback (innermost last): File "<interactive input>", line 1, in ? TypeError: cannot add type "int" to string
1 Оператор + позволяет объединять строки.
2 В простейшем случае форматирование дает такой же результат, как и объединение строк.
3 (userCount, ) — кортеж с одним элементом. Да, его синтаксис выглядит немного странно, но для этого есть весомая причина: только так можно однозначно определить кортеж. На самом деле, вы всегда можете ставить запятую после последнего элемента в определении списка, кортежа или словаря, но запятая необходима, если вы определяете кортеж из одного элемента. Если бы запятая не была обязательной, интерпретатор не смог бы определить, что имелось ввиду под выражением (userCount) — кортеж с одним элементом или просто значение userCount.
4 Форматирование также работает и с целыми числами при использовании шаблона %d вместо %s.
5 При попытке сложить строку со значением не строкового типа генерируется исключение. В отличии от форматирования, простое сложение работает, только если все значения уже являются строками.

Дополнительная литература