Шаг 25.
Python: тонкости программирования. ... . Способы форматирования строковых значений. №1. "Классическое" форматирование строковых значений

    На этом шаге мы рассмотрим, в чем заключается этот способ.

    Строковые значения в Python имеют уникальную встроенную операцию, к которой можно обратиться через оператор %. Этот оператор представляет собой краткую форму, которая позволяет очень легко выполнять простое позиционное форматирование. Если вы когда-либо имели дело с функцией printf() в языке C, то вы сразу же поймете, как эта операция работает. Ниже дан простой пример:

>>> 'Привет, %s' % name 
 'Привет, Боб'

    Здесь мы используем спецификатор формата %s, чтобы сообщить Python, где подставить значение переменной name, представленной в виде строкового значения. Этот способ называется "классическим" форматированием строк.


См. документацию Python "Форматирование строк в стиле printf": https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting.

    В классическом форматировании строк существуют и другие спецификаторы формата, служащие для того, чтобы дать вам возможность управлять выводимым строковым значением. Например, имеется возможность преобразовывать числа в шестнадцатеричную форму записи или заполнять пробелами для генерирования безупречно отформатированных таблиц и отчетов.

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

>>> '%x' % errno 
'badc0ffee'

    Синтаксис "классического" форматирования строк слегка изменится, если вы захотите выполнить многочисленные подстановки в одном-единственном строковом значении. Поскольку оператор % принимает всего один аргумент, вам необходимо обернуть правую часть в кортеж, как здесь:

>>> 'Эй, %s! Вот ошибка 0x%x!' % (name, errno)
'Эй, Боб! Вот ошибка 0xbadc0ffee!'

    Кроме того, к подстановкам переменных в своей форматной строке можно обращаться по имени. В этом случае в оператор % следует передать словарь с отображением имен на соответствующие им значения:

>>> 'Эй, %(name)s! Вот ошибка 0x%(errno)x!' % {"name": name, "errno": errno }
'Эй, Боб! Вот ошибка 0xbadc0ffee!'

    Это облегчает поддержку ваших строк и их модификацию в будущем. Вам не нужно волноваться о том, что порядок, в котором вы передаете значения, совпадает с порядком, на который ссылаются значения в форматной строке. Разумеется, оборотной стороной этого приема является то, что он требует набирать чуть больше текста.

    Вы можете спросить, почему такое форматирование в стиле printf() называется "классическим" форматированием строк. Дело в том, что оно технически было заменено на "современное" форматирование, о котором мы собираемся поговорить уже через минуту. Но несмотря на то что "классическому" форматированию стали придавать меньшее значение, оно не было объявлено нерекомендуемым для использования. И в последних версиях Python оно по-прежнему поддерживается.

    На следующем шаге мы рассмотрим "современное" форматирование строковых значений.




Предыдущий шаг Содержание