这里遇到一个奇怪的问题,其中python的operator.pow返回的值与**不同
import operator
pow(-5,0.333)
>> (0.856078889075021+1.4791926873843961j)
-5**0.333
>> -1.709058826000847
我在这里想念什么?我需要说-1.709而不是复数才能与我的其余代码结构一起工作。
答案 0 :(得分:3)
在Python中,幂运算符**
的绑定比左侧的一元运算符更紧密;它比右边的一元运算符绑定得更紧密(请参见docs)。
因此,与pow(-5, 0.333)
的正确等价为(-5)**0.333
。与-5**0.333
的正确当量为-pow(5, 0.333)
。
您可以使用抽象语法树分析/转储来验证运算符的优先级:
>>> import ast
>>> ast.dump(ast.parse("-5**0.333"), annotate_fields=False)
'Module([Expr(UnaryOp(USub(), BinOp(Num(5), Pow(), Num(0.333))))])'
>>> astdump.indented("-5**0.333") # pip install astdump
Module
Expr
UnaryOp
USub
BinOp
Num
Pow
Num