Rodegast
Разница большая, особенно когда пытаются конкатенировать строки при помощи этого формата.
Разнотипные аргументы может использовать полиморфно
>>> fmt = '{} {}'
>>>
>>> [fmt.format(*i) for i in ((1, 2), ('a', 'b'), (1+2j, None))]
['1 2', 'a b', '(1+2j) None']
>>>
>>>
>>> fmt = '{:10}'
>>>
>>> list(map(fmt.format, (1, 'a', 1+2j)))
[' 1', 'a ', ' (1+2j)']
>>>
Причём можно и явно указывать, какие типы ожидаются, если, наоборот, нужно строго пропускать.
Также именованные аргументы играют тоже большую роль для ясности кода
>>> fmt = 'User: {user}\nAddress: {address}\nPhone: {phone}'
>>>
>>> print('\n\n'.join(fmt.format(user=u, address=a, phone=p)
... for u, a, p in (('John', 'Street 123', 123),
... ('Mary', 'Street 456', 456),
... ('Bob', 'Street 789', '555-55-55'),)))
User: John
Address: Street 123
Phone: 123
User: Mary
Address: Street 456
Phone: 456
User: Bob
Address: Street 789
Phone: 555-55-55
>>>
Часто бывает формат многострочный, а аргументов с десяток. Сообщение бота какое-нибудь с кучей подстановок.