Форматирование%s предшествует оператору + в соединении двух строк перед форматированием

Восстановил старый код и попытался изменить его, чтобы он соответствовал стандартам Python7 и 3.

Многие строковые операции использовали "Something was %s in here" % "merged" синтаксис.

Итак, я начал процесс замены этого на .format("merged"), работал отлично, пока этот ряд не всплыл:

cmd = 'cat %s[0-9] | compress.sh - | ' % filename[:-2] + cmd

Теперь я подумал, что внимательно посмотрел на это и преобразовал его в:

cmd = 'cat {}[0-9] | compress.sh - | '.format(filename[:-2] + cmd)

Видя как командная строка была построена на последнем | действительно не вызывало никаких предупреждающих знаков.

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

cmd = 'cat {}[0-9] | compress.sh - | {}'.format(filename[:-2], cmd)

Я знаю, что вы, вероятно, должны сделать "%s" % ("x",) + cmd здесь, но тем не менее, это был код, с которым я остался.

Я спросил коллег и друзей, они все предполагали одно и то же: "Я предполагаю, что математический оператор предшествует оператору функции соединения строки".

Это явно не тот случай, и мне интересно, есть ли причина, почему "%s" % "x" идет раньше + "y"?
Говоря техническим языком, операция сложения (чисто математическая) должна выполняться перед вызовом любой функции?

Почему Python2 рассматривает добавление как подержанную операцию для функции слияния в строку?

1 ответ

Решение

Поскольку % Оператор форматирования строки имеет приоритет перед % оператор остатка или модуля, который связывает более плотно, чем + оператор сложения. Смотрите все операторы в порядке приоритета здесь

Другие вопросы по тегам