在Python中将数字提高到零次方时的奇怪行为

4 投票
3 回答
4162 浏览
提问于 2025-04-19 09:24

我正在使用Python 2.7.5。当你把一个整数的零次方抬起来时,你可能会期待看到-1或1,这取决于这个数是正数还是负数。

直接在Python解释器里输入这个操作,结果是这样的:

>>> -2418**0
-1

这个结果是正确的。但是当我在同一个解释器里输入这个:

>>> result = -2481
>>> result**0
1

结果却是1,而不是-1。使用complex这个内置功能,像这里提到的这样,对结果没有任何影响。

这到底是为什么呢?

3 个回答

0

你的数学算错了。(-2481)**0 应该等于 1。

根据维基百科,任何非零数字的0次方都是1

3

-2418**0 在数学上被理解为 -1 * (2418**0),所以结果是 -1 * 1 = -1。在这个计算中,幂运算(就是指数运算)会先于乘法进行。

在你的第二个例子中,你把变量 result 赋值为 -1。接下来的一行代码是把 result 这个变量提升到 0 的幂,所以你得到的结果是 1。换句话说,你实际上是在计算 (-1)**0

对于任何实数 n 来说,n**0 的结果都是 1,除了 0:严格来说,0**0 是没有定义的,尽管在 Python 中,计算 0**0 仍然会返回 0**0 == 1

8

你为什么会觉得答案是-1呢?根据我学到的定义,1才是正确的答案。

第一个答案之所以不对,是因为运算符的优先级问题。

(-1)**0 = 1

-1**0 = -(1**0) = -(1) = -1

想了解0的指数的定义,可以看看维基百科:http://en.wikipedia.org/wiki/Exponentiation#Zero_exponent

撰写回答