为什么Python说pow只有两个参数
为什么 Python 会告诉我“TypeError: pow 期望 2 个参数,但得到了 3 个”,尽管在 IDLE 中有时它又能正常工作呢?我只是简单地在用 pow(a,b,c)
。我的程序很短,而且我没有在任何时候更改 pow
的定义,因为我需要用它来进行一些指数运算。
注意:这里说的 pow
是来自 __builtin__
,而不是 Math
。
3 个回答
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() 会根据浮点数的舍入情况返回不同的结果。)
也许你在使用时违反了上面加粗的部分?
如果你经常使用数学函数,但不常用到带三个参数的pow函数,在Python 2.7中,有一个解决办法就是导入__builtin__
,然后用__builtin__
.pow来调用这个带三个参数的函数。
内置的 pow
函数可以接收两个或三个参数。如果你使用 from math import *
这条命令,它会被数学库里的 pow
替代,而这个替代的 pow
只接受两个参数。我的建议是使用 import math
,或者在导入时明确列出你需要用到的函数。类似的问题也会出现在 open
和 os.open
之间。