Всегда ли уместно объединить две строки, используя знак плюс (+), вместо конкатенации с фигурными скобками ({}) и `format` в Python 2.7? - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь написать чистый и лаконичный код, и во многих кодах, которые я просматриваю, иногда я вижу, что люди непоследовательны в своем коде. Я спрашиваю, есть ли когда-нибудь случай, когда это

print("Cars on the road: " + cars)

более подходит, чем этот

print("Cars on the road: {}".format(cars))

или это просто вопрос предпочтений?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

если вы знаете , что имеете дело с простыми строками, то да, Простое лучше, чем сложное . Возможность форматирования отличная, и что-то вроде

“lit1” + var + “lit2” 

- это определенный запах кода.

Ваш пример не является, и дополнительная сложность версии на основе шаблона представляет собой небольшую дополнительную когнитивную нагрузку, которую I будет избегать или, по крайней мере, не стремиться, несмотря на широкое использование шаблонов.

0 голосов
/ 29 июня 2018

Большое функциональное различие между двумя приведенными вами примерами состоит в том, что при объединении с + операция завершится ошибкой, если объект с правой стороны операнда не является строкой:

"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"

В некоторых ситуациях такое поведение может быть нежелательным или необходимым, например, когда вы просто объединяете строковый литерал с объектом, который, как ожидается, будет строкой.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...