Python字符串格式和字符串乘法奇数

时间:2009-08-21 01:55:41

标签: python string formatting operator-precedence

Python正在进行字符串乘法,我希望它可以进行数字乘法,我不知道为什么。

>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8

即使将类型强制为整数也不会执行任何操作。 (我意识到这是多余的,但对我来说这是一个白痴检查:

 >>> print('%d' % int(2) * int(4))
 2222

显然我解决了我的问题(加上括号做了)但是这里发生了什么?如果这只是一个我必须记住的怪癖,那很好,但我宁愿理解这背后的逻辑。

2 个答案:

答案 0 :(得分:12)

您遇到运算符优先级

在python %中具有与*相同的优先级,因此它们从左到右分组。

所以,

print('%d' % 2 * 4)

相同
print( ('%d' % 2) * 4)

这是python operator precedence table

由于难以记住运算符优先级规则,并且规则可能很微妙,因此在表达式中链接多个运算符时,通常最好简单地使用显式括号。

答案 1 :(得分:2)

啊,我想我弄明白了。就在我发布消息之后。这是一个操作顺序的事情。正在计算字符串格式,并且结果字符串是字符串乘以最后一个操作数。

当我输入:

>>> print '%d' % 2 * 4
2222

事实证明我好像用这种方式指定了优先顺序:

>>> print ('%d' % 2) * 4
2222