4

как называется подобная запись, вывода информации:

print("Hello, %s" % foo)

и:

print("Float - %.2f" % bar)
Dmitriy Simushev
  • 17,999
  • 5
  • 49
  • 85
cmd
  • 1,530

2 Answers2

8

Это называется форматирование строк в стиле printf.

Любая строка может включать в себя произвольное число особых спецификаторов форматирования, состоящих из маркерного символа(обычно %) и набора параметров преобразования, последним из которых всегда указывается тип форматирования объекта.

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

Pyhon вместо этой функции использует оператор форматирования, тоже обозначенный символом процента(%) - он разделяет форматную строку и значения, которые с её помощью нужно отформатировать.

Разбирая ваши примеры:

"Hello, %s" % foo

Означает: отформатировать значение переменной foo как строку и вставить её в указанное место.

"Float - %.2f" % bar

Здесь же %.2fтребует форматирования bar как число с плавающей точкой(f - float), c округлением до 2-х знаков после запятой

Sergey Rufanov
  • 8,500
  • 25
  • 37
  • 1
    Это не оператор форматирования, а оператор остатка от деления, зачем-то использованный для форматирования строк. Он считается устаревшим (в третьем питоне его вернули только ради обратной совместимости), и вместо него следует использовать функцию format – andreymal Jan 23 '16 at 11:56
  • @andreymal, конкретно в питоне, если слева от оператора % строит строка, то называется он string formatting operator - оператор форматирования строк. Да, существует и modulus operator(тот самый "оператор остатка от деления"), выглядящий абсолютно так же, но применяющийся когда слева от него стоят значения цифровых типов. Тем не менее, эти операторы независимы друг от друга. – Sergey Rufanov Jan 23 '16 at 12:28
  • 1
    @andreymal, по поводу "он считается устаревшим" - слухи об этом пошли скорей всего из "хотелок", высказанных в блогах некоторых программистов использующих этот язык. Однако в текущей версии 3-й ветки Python он вовсе не помечен как "deprecated", и разработчики не высказывали желания когда-либо убрать его из спецификации языка. – Sergey Rufanov Jan 23 '16 at 12:28
  • С точки зрения питонового кода это один и тот же оператор. И у чисел, и у строк % реализован через магический метод __mod__ (который по желанию можно перегрузить) – andreymal Jan 23 '16 at 13:18
  • 1
    Мало того, что форматирование при помощи % не является устаревшим, так оно ещё и быстрее, чем с использованием format: The relative speeds of str.format and % – zed Jan 23 '16 at 16:26
  • 1
    А ещё в Python 3.5 появилась поддержка форматирования в бинарных данных: PEP 461 - % formatting support for bytes and bytearray – zed Jan 24 '16 at 19:21
4

Как уже сказано, % - это символ форматирования строк.

Т.е используя процент в строке, мы указываем, что в конечном отображении строки будет использован один из аргументов метода printf(). Не стоит забывать, что в строке форматирования после процента мы указываем еще и тип аргумента, который будет выведен в консоль.

%s - строка
%f - вещественный
%d - целый
dirkgntly
  • 3,998