在格式化

时间:2016-11-18 13:58:32

标签: 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

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

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 个答案:

答案 0 :(得分:5)

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

查看所有运算符