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

Sch*_*hof 4 python string formatting operator-precedence

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

>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8
Run Code Online (Sandbox Code Playgroud)

即使强制类型为整数也不会做任何事情.(我意识到这是多余的,但对我来说这是一个白痴检查:

 >>> print('%d' % int(2) * int(4))
 2222
Run Code Online (Sandbox Code Playgroud)

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

Kar*_*and 12

您遇到了运算符优先级.

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

所以,

print('%d' % 2 * 4)
Run Code Online (Sandbox Code Playgroud)

是相同的,

print( ('%d' % 2) * 4)
Run Code Online (Sandbox Code Playgroud)

这是python 运算符优先级表.

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