为什么Python说pow只有两个参数

14 投票
3 回答
13638 浏览
提问于 2025-04-16 01:45

为什么 Python 会告诉我“TypeError: pow 期望 2 个参数,但得到了 3 个”,尽管在 IDLE 中有时它又能正常工作呢?我只是简单地在用 pow(a,b,c)。我的程序很短,而且我没有在任何时候更改 pow 的定义,因为我需要用它来进行一些指数运算。

注意:这里说的 pow 是来自 __builtin__,而不是 Math

3 个回答

0

http://docs.python.org/release/2.6.5/library/functions.html

pow(x, y[, z]) 这个函数的作用是计算 x 的 y 次方。如果你提供了 z,那么它会计算 x 的 y 次方,然后对 z 取余,这样计算起来比直接用 pow(x, y) % z 更高效。你也可以用 x**y 来表示 x 的 y 次方,这两者是一样的。

这里的参数必须是数字类型。如果你用的参数类型不一样,Python 会按照一定的规则来处理这些不同类型的数字。对于整数和长整数,结果的类型会和输入的类型一致(经过转换后),除非第二个参数是负数;如果第二个参数是负数,所有的参数都会被转换成浮点数,结果也会是浮点数。例如,10**2 的结果是 100,而 10**-2 的结果是 0.01。(这个特性是在 Python 2.2 中加入的。在 Python 2.1 及之前版本中,如果两个参数都是整数类型,且第二个参数是负数,就会出现错误。)如果第二个参数是负数,第三个参数 z 就不能提供。如果 z 存在,x 和 y 必须是整数类型,且 y 必须是非负的。(这个限制是在 Python 2.2 中加入的。在 Python 2.1 及之前版本中,使用浮点数的三参数 pow() 会根据浮点数的舍入情况返回不同的结果。)

也许你在使用时违反了上面加粗的部分?

1

如果你经常使用数学函数,但不常用到带三个参数的pow函数,在Python 2.7中,有一个解决办法就是导入__builtin__,然后用__builtin__.pow来调用这个带三个参数的函数。

22

内置的 pow 函数可以接收两个或三个参数。如果你使用 from math import * 这条命令,它会被数学库里的 pow 替代,而这个替代的 pow 只接受两个参数。我的建议是使用 import math,或者在导入时明确列出你需要用到的函数。类似的问题也会出现在 openos.open 之间。

撰写回答