运算符pow()返回的值与**

2024-04-24 14:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

面对一个奇怪的问题python操作员.pow返回的值与**

import operator
pow(-5,0.333)
>> (0.856078889075021+1.4791926873843961j)

-5**0.333
>> -1.709058826000847

我错过了什么?我需要它说-1.709而不是复数来处理我的代码结构的其余部分。你知道吗


Tags: 代码import结构operator复数操作员pow
1条回答
网友
1楼 · 发布于 2024-04-24 14:03:04

在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

相关问题 更多 >