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

标签 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,但无论如何,这是我留下的代码。

我问过同事和 friend ,他们都假设了同样的事情:“我猜数学运算符在连接字符串的函数运算符之前”

显然不是这种情况我想知道,"%s"% "x" 出现在 + "y" 之前是不是有原因?
从技术上讲,加法操作(这里纯粹是数学方面的)应该在任何函数调用之前进行?

为什么Python2把加法当成一个二手操作合并成一个字符串的功能?

最佳答案

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

关于python - 在格式化之前连接两个字符串时,%s 格式先于 + 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678942/

相关文章:

python - 使用 pandas 提取我需要的数据

python - 如何禁止阻止我的机器人的不和谐成员?不和谐.py

Java:字符串填充失败

python - 下载 OPENSSL 后 pip 显示错误

python - 为什么 Python 的不喜欢列表?

python - 如何在启动时运行 Django 开发服务器?

python - 哪种编码?由波浪号 ~ 和花括号 {} 括起来的字符串

java - UnknownFormatConversionException 是由 String.format() 中的符号 '%' 引起的

c# - 货币文化格式不适用于 DataGridView 列

python - 具有超过 32 个维度的 numpy ndarray