将中间值赋给变量会使计算结果复杂。

4

如果我将其中一个中间步骤分配给变量,Python会给我不同的结果,就像这样:

>>> -0.207 ** 0.66 - 1
-1.3536229379434348
>>> a = -0.207
>>> a ** 0.66 - 1
(-1.1703591496008927+0.30988214273656856j)

对于这个简单的计算,如果我将-0.207赋值给一个临时变量a,那么a ** 0.66 - 1的结果会被计算为一个复数。
为什么会发生这种情况,我该如何阻止Python这样做?

1
这个有点让我震惊了一下。优先顺序的问题,宝贝。 - Michael Schmidt
是的...我不知道**甚至在一元-之前。 - kharsair
1个回答

5

根据Python,你陈述的问题的正确答案是一个负数。-0.207**0.66-1的计算结果大约为-1.35
这种情况发生的原因是你在一行代码中计算错误了: -0.207 ** 0.66 - 1实际上计算结果是-(0.207 ** 0.66) - 1而不是像你期望的那样(-0.207) ** 0.66 - 1

当你将代码分成多行时,你改变了计算方式到第二个语句。

为了避免这种情况发生,应该在可能存在歧义的地方使用明确的括号。


哇,今天我才知道 ** 的优先级比一元运算符 - 更高。 - CrazyChucky
1
是的,我也感到惊讶。我猜如果你明确地写成-1 *就更容易理解。 - Adid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接