EDIT:将assert
添加为suggested by Wrzlprmft,这不会引发任何异常。
在以下情况下,我必须使用许多a**b
类型的表达式编写代码
import sympy as sp
a, b = sp.symbols('a,b', real=True, positive=True)
expr1 = a**b
expr2 = pow(a,b)
assert expr1 is expr2
a**b
和pow(a,b)
之间的预期/可能差异是什么?****(例如,在简化、收集表达式时)。
在任何情况下我都应该预料到可能的错误结果吗?
到目前为止,我什么也没找到。
我不认为我会使用pow
的第三个参数,因为我的基将是真实的(指数通常是整数或一位或两位整数之间的比率),所以this或this是不相关的。
This或this侧重于与math.pow
的比较,尽管一些答案也包括**
和pow
的性能比较,显示出微小的差异。
如果math.pow
或sympy.Pow
在任何情况下提供了任何优势,我欢迎澄清,我不认为我会执行繁重的计算,所以微小的性能差异可能不会影响我的用例。
1条答案
按热度按时间cbjzeqam1#
在您的上下文中,
a**b
和pow(a,b)
尽可能相同:它们指的是同一个对象:is
检查Python中的对象标识。虽然在实际应用中很少需要这样的检查,但它可以最简单地回答您的问题。(请注意,Python对象可以在各个方面都是等价的,但仍然是不同的对象。例如,您不应该依赖于在未来的SymPy实现中给出的对象标识。)此外,Python文档规定:
双参数形式
pow(base, exp)
等效于使用幂运算符:base**exp
.因此,对于每个语言定义的任何参数**,这两个都是相同的,也就是说,
pow(a,b)
只是调用a.__pow__(b)
(这是a**b
在幕后所做的)。