2016-11-18 12 views
3

Восстановил старый код и попытался реорганизовать его в соответствии со стандартами Python7 и 3.% s форматирование предшествует + оператору при объединении двух строк перед форматированием

Многие строковые операции использовали синтаксис "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 рассматривает добавление в качестве операции второй руки функции слияния в строку?

ответ

5

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

+3

Сегодня я узнал! Не OP, но спасибо в любом случае :-) – Gormador

+1

Делает общий смысл, когда вы слышите это вслух. Ссылка отличная кстати, пригодится по многим причинам. Спасибо! – Torxed