Python 字符串格式化与字符串乘法的奇怪现象
我在用Python的时候,发现它在做字符串的乘法,而我其实想要的是数字的乘法,我搞不懂为什么会这样。
>>> print('%d' % 2 * 4)
2222
>>> print('%d' % (2 * 4))
8
即使我强制把类型改成整数,也没什么用。(我知道这样做有点多余,但这是我自己检查的方式:)
>>> print('%d' % int(2) * int(4))
2222
显然我解决了我的问题(加上括号就可以了),但这到底是怎么回事呢?如果这只是个我需要记住的小怪癖,那也没问题,但我更想理解背后的逻辑。
2 个回答
2
啊,我想我明白了。就在我发完消息之后,当然。其实这是一个运算顺序的问题。字符串格式化正在被计算,而得到的字符串又和最后一个操作数进行了字符串的重复。
当我输入:
>>> print '%d' % 2 * 4
2222
结果就好像我这样指定了优先级:
>>> print ('%d' % 2) * 4
2222
12
你遇到的是运算符优先级的问题。
在Python中,%
和*
的优先级是一样的,所以它们是从左到右进行分组的。
所以,
print('%d' % 2 * 4)
和下面这个是一样的,
print( ('%d' % 2) * 4)
这里有一个Python的运算符优先级表。
因为记住运算符优先级的规则比较难,而且这些规则有时候很微妙,所以在表达式中使用多个运算符时,最好还是明确地加上括号。