Форматирование%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 ответ
Поскольку %
Оператор форматирования строки имеет приоритет перед %
оператор остатка или модуля, который связывает более плотно, чем +
оператор сложения. Смотрите все операторы в порядке приоритета здесь