4

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

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

即使将类型强制为整数也无济于事。(我意识到这是多余的,但对我来说这是一个白痴检查:

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

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

4

2 回答 2

12

您正在体验运算符优先级

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

所以,

print('%d' % 2 * 4)

是相同的,

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

这是 python运算符优先级表

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

于 2009-08-21T02:02:41.503 回答
2

啊,我想我明白了。当然,就在我发布消息之后。这是操作顺序的事情。正在计算字符串格式,并将生成的字符串与最后一个操作数相乘。

当我输入:

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

事实证明,就好像我以这种方式指定了优先级:

>>> print ('%d' % 2) * 4
2222
于 2009-08-21T01:57:54.397 回答