Большое функциональное различие между двумя приведенными вами примерами состоит в том, что при объединении с +
операция завершится ошибкой, если объект с правой стороны операнда не является строкой:
"abc" + object()
Например, вызовет следующее:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'object' object to str implicitly
Это верно, даже если объект на правой стороне реализует метод __str__
:
class Foo:
def __str__(self):
return "str"
Использование формата, однако, автоматически преобразует переданный аргумент, используя метод __str__
:
"{}".format(Foo()) # "str"
В некоторых ситуациях такое поведение может быть нежелательным или необходимым, например, когда вы просто объединяете строковый литерал с объектом, который, как ожидается, будет строкой.
Во всех других случаях я согласен с постом , процитированным в комментариях , который содержит множество веских причин, почему форматирование является более идиоматически правильным и потенциально более эффективным.