Почему по меньшей мере 4 способа форматированного вывода, почему это не соотносится с принципом из PEP?
Цитата из The Zen of Python:
There should be one-- and preferably only one --obvious way to do it.
Примеры разнообразного кода:
'hello, %s' % name
f'hello, { name } '
'hello, { } '.format(name)
Ответы (2 шт):
Первый вариант уже морально устарел. Второй и третий дополняют друг друга. Например f-string не позволяет делать отложенную интерполяцию переменных. Т.е. если значение переменной на момент создания f-string вам неизвестно, тогда вам впоследствии придется воспользоваться str.format().
Пример:
s = f'hello, {{name}}'
print(s)
name = 'Васисуалий'
print(s.format(name=name))
вывод:
hello, {name}
hello, Васисуалий
Я думаю основная причина в обратной совместимости. Наверняка вы бы не хотели исправлять тонны старого кода, если бы в новых версиях убрали возможность использовать 'hello, %s' % name.
Потому что язык развивается, появляются всё более лучшие, современные способы форматирования. Они, кстати, параллельно в разных языках появляются, создатели языков перенимают общие практики друг у друга.
Современный предпочтительный способ форматирования только один - это f-строки, всё остальное оставлено в основном для совместимости с написанным ранее кодом.