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

Tor*_*xed 3 python string-formatting python-2.x

复活了一些旧代码并尝试重构它以匹配Python7和3标准.

很多字符串操作都使用了"Something was %s in here" % "merged"语法.

所以我开始交换它的过程.format("merged"),工作得很好,直到弹出这一行:

cmd = 'cat %s[0-9] | compress.sh - | ' % filename[:-2] + cmd
Run Code Online (Sandbox Code Playgroud)

现在我以为我彻底看了这个并将它转换成:

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

看到命令行是建立在进一步的最后|并没有真正触发任何警告标志.

然而,后来我发现正确的转换应该有很多头部刮擦和调试:

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

我知道你可能应该在"%s" % ("x",) + cmd这里做,但从来没有,这就是我留下的代码.

我问过同事和朋友,他们都假设了同样的事情:"我猜数学运算符先于函数运算符加入字符串".

显然情况并非如此,我想知道,"%s" % "x"之前有什么理由+ "y"吗?
从技术上讲,对我来说,在任何函数调用之前,加法运算(纯粹说数学明智)都应该进行?

为什么Python2将加法视为合并为字符串函数的二手操作?

Pat*_*ugh 5

因为%字符串格式化运算符与%余数或模数运算符共享优先级,后者比+加法运算符更紧密地绑定.查看所有的运营商优先顺序这里

  • 今天我学到了!不是OP,但无论如何,谢谢:-) (3认同)