在格式化之前连接两个字符串时,%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
恢复了一些旧代码并尝试重构它以匹配 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