在格式化之前连接两个字符串时,%s 格式先于 + 运算符

%s formatting precedes + operator in joining two strings before formatting

恢复了一些旧代码并尝试重构它以匹配 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,但无论如何,这是我留下的代码。

我问过同事和朋友,他们都假设了同样的事情:"I guess the math operator precedes the function operator of joining the string".

显然不是这样 我想知道 "%s" % "x"+ "y" 之前有什么原因吗?
从技术上讲,对我来说 addition 操作(这里纯粹是数学方面的)应该在任何函数调用之前进行?

为什么Python2把加法当做是合并成字符串函数的二手操作?

因为 % 字符串格式化运算符与 % 余数或取模运算符共享优先级,后者比 + 加法运算符绑定得更紧密。按优先顺序查看所有运算符 here