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

13
为什么Python告诉我“TypeError:pow预期2个参数,而得到3个参数”尽管在IDLE中运行正常(有时它也会在IDLE中告诉我这一点)? 我只是简单地使用 pow(a,b,c)。我的程序非常简短,我没有在任何时候更改pow的定义,因为我需要用它做一些指数运算。

注意:这是来自__builtin__pow,而不是Math
3个回答

21

内置的pow函数接受两个或三个参数。如果你使用了from math import *,那么它将被math模块中的pow函数所取代,而后者只接受两个参数。我的建议是使用import math,或在导入列表中明确列出所使用的函数。同样的问题也存在于openos.open之间。


啊...可能是这个原因。谢谢!!!嗯...从另一个文件导入会影响它吗?我正在导入另一个我编写的程序,它也有 from math import * - calccrypto
如果你使用 from p import * 导入另一个程序,那么是的。请使用 import p 或者明确列出需要导入的内容,例如:from p import [...] - sdcvvc
如果你在使用from math import *之后需要调用内置的pow函数,你可以使用显式形式__builtins__.pow() - ynn

1
如果您经常使用数学函数,但很少使用Python 2.7中的三参数版本的pow,则一种解决方法是导入__builtin__并调用__builtin__.pow来使用三个参数。

在这两个例子中,“builitin” 两侧应该有两个下划线字符,但是格式化解释为加粗字体 - 不确定该怎么处理这个问题。 - Paula Thomas

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 更高效地计算)。两个参数的形式 pow(x, y) 等同于使用幂运算符:x**y。

参数必须具有数字类型。对于混合操作数类型,将应用二进制算术运算符的强制转换规则。对于 int 和 long int 操作数,结果与操作数(经过强制转换后)具有相同的类型,除非第二个参数为负数;在这种情况下,所有参数都将转换为 float,并返回一个浮点结果。例如,102 返回 100,但 10-2 返回 0.01。(此功能是在 Python 2.2 中添加的。在 Python 2.1 及之前版本中,如果两个参数都是整数类型且第二个参数为负数,则会引发异常。)如果第二个参数为负数,则必须省略第三个参数。如果存在 z,则 x 和 y 必须是整数类型,而 y 必须为非负数。(此限制是在 Python 2.2 中添加的。在 Python 2.1 及之前版本中,带有三个参数的浮点 pow() 返回依赖于浮点舍入意外的平台相关结果。)

也许你正在违反粗体部分的规定?


不需要了解,我确定所有的值都是正整数。编辑:是的,a、b、c = 9、4、225。 - calccrypto

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