На этом шаге мы рассмотрим, в чем заключается этот способ.
Строковые значения в Python имеют уникальную встроенную операцию, к которой можно обратиться через оператор %. Этот оператор представляет собой краткую форму, которая позволяет очень легко выполнять простое позиционное форматирование. Если вы когда-либо имели дело с функцией printf() в языке C, то вы сразу же поймете, как эта операция работает. Ниже дан простой пример:
>>> 'Привет, %s' % name 'Привет, Боб'
Здесь мы используем спецификатор формата %s, чтобы сообщить Python, где подставить значение переменной name, представленной в виде строкового значения. Этот способ называется "классическим" форматированием строк.
В классическом форматировании строк существуют и другие спецификаторы формата, служащие для того, чтобы дать вам возможность управлять выводимым строковым значением. Например, имеется возможность преобразовывать числа в шестнадцатеричную форму записи или заполнять пробелами для генерирования безупречно отформатированных таблиц и отчетов.
Ниже используем спецификатор формата %x, чтобы преобразовать целочисленное значение в строковое и представить его как шестнадцатеричное число:
>>> '%x' % errno 'badc0ffee'
Синтаксис "классического" форматирования строк слегка изменится, если вы захотите выполнить многочисленные подстановки в одном-единственном строковом значении. Поскольку оператор % принимает всего один аргумент, вам необходимо обернуть правую часть в кортеж, как здесь:
>>> 'Эй, %s! Вот ошибка 0x%x!' % (name, errno) 'Эй, Боб! Вот ошибка 0xbadc0ffee!'
Кроме того, к подстановкам переменных в своей форматной строке можно обращаться по имени. В этом случае в оператор % следует передать словарь с отображением имен на соответствующие им значения:
>>> 'Эй, %(name)s! Вот ошибка 0x%(errno)x!' % {"name": name, "errno": errno } 'Эй, Боб! Вот ошибка 0xbadc0ffee!'
Это облегчает поддержку ваших строк и их модификацию в будущем. Вам не нужно волноваться о том, что порядок, в котором вы передаете значения, совпадает с порядком, на который ссылаются значения в форматной строке. Разумеется, оборотной стороной этого приема является то, что он требует набирать чуть больше текста.
Вы можете спросить, почему такое форматирование в стиле printf() называется "классическим" форматированием строк. Дело в том, что оно технически было заменено на "современное" форматирование, о котором мы собираемся поговорить уже через минуту. Но несмотря на то что "классическому" форматированию стали придавать меньшее значение, оно не было объявлено нерекомендуемым для использования. И в последних версиях Python оно по-прежнему поддерживается.
На следующем шаге мы рассмотрим "современное" форматирование строковых значений.