Python正在进行字符串乘法,我希望它可以进行数字乘法,我不知道为什么。
>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8
即使将类型强制为整数也不会执行任何操作。 (我意识到这是多余的,但对我来说这是一个白痴检查:
>>> print('%d' % int(2) * int(4))
2222
显然我解决了我的问题(加上括号做了)但是这里发生了什么?如果这只是一个我必须记住的怪癖,那很好,但我宁愿理解这背后的逻辑。
答案 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