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