math.sqrt
是平方根的C实现,因此与使用**
实现Python内置pow
函数的运算符不同。因此,使用math.sqrt
实际给出的答案与使用**
运算符给出的答案不同,并且确实有一个计算上的原因比内置函数更偏向于numpy
或采用math
模块实现。特别是,sqrt函数可能以最有效的方式实现,而**
在大量的基数和指数上运行,并且对于平方根的特定情况可能未进行优化。另一方面,内置pow
函数可以处理一些额外的情况,例如“复数,无穷整数幂和模幂”。
有关**
和之间的区别的更多信息,请参见此堆栈溢出问题math.sqrt
。
关于哪个更“ Pythonic”,我认为我们需要讨论该词的确切定义。从官方Python词汇表中可以看出,如果某段代码或构想“紧紧遵循Python语言最常见的习惯用法,而不是使用其他语言的通用概念来实现代码”,则该代码或构想就是Pythonic。在我能想到的每种其他语言中,都有一些具有基本平方根函数的数学模块。但是,有些语言缺少像**
C ++这样的幂运算符。所以,**
可能是更Python,但它是否是客观的更好取决于所使用的情况。