Почему print ( "text" + str (var1) + "more text" + str (var2)) описывается как "отклонено"?

Почему приведенный ниже код называется "вековым неодобренным методом" печати в комментарии "Змеи и кофе" к сообщению Blender Печать нескольких аргументов в python? Связано ли это с внутренним кодом/реализацией Python 2 или Python 3?

print("Total score for " + str(name) + " is " + str(score))

Ответ 1

Добавление многих строк отклонено, потому что:

  • он не читается, по сравнению с альтернативами.
  • это не так эффективно, как альтернативы.
  • Если у вас есть другие типы, вы должны вручную называть str на них.

И, да, это действительно старо.: -)

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

Если у вас есть строка с заполнителями, она не только более читаема (у вас нет этих + и str между ними), но python также может вычислить, как долго последняя строка, и выделить только один массив для финальную строку и вставить все.

На практике это не совсем то, что происходит, потому что Python проверяет, является ли строка промежуточной и делает некоторую оптимизацию. Так что это не так плохо, как создание ненужных массивов n-2.

Для небольших строк и/или интерактивного использования вы даже не заметите разницы. Но тогда другие способы имеют то преимущество, что они более читабельны.

Альтернативы могут быть (первые два скопированы из ответа @MKemps):

  • "Total score for {} is {}".format(name, score)
  • "Total score for %s is %s" % (name, score) (также старый!)
  • "Total score for {name} is {score}".format(name=name, score=score)
  • f"Total score for {name} is {score}" (очень новый - введен в Python 3.6)

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

Ответ 2

Это считается старым, потому что вы можете использовать "лучшие" способы отформатировать его с введением python 3 (и более поздних версий python 2).

print("Total score for "+str(name)"+ is "+str(score))

Может быть записано как: print("Total score for %s is %s" % (name, score))

Несмотря на множество способов, вы можете отформатировать печать в более поздних версиях python 2 и выше.

То, что выше, также технически старое, это еще один способ сделать это в более поздних версиях python 2 и выше.

print('Total score for {} is {}'.format(name, score)