lzb1001 发表于 2023-3-22 10:58:09

还是关于幂运算

本帖最后由 lzb1001 于 2023-3-22 11:01 编辑

小甲鱼教材里说:幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低


1、如果两边都有一元操作符呢?比如:

>>> -3 ** -2
-0.1111111111111111


>>> (-3) ** (-2)
0.1111111111111111


2、为何后者加了括号后两种计算结果不同?如何理解?

isdkz 发表于 2023-3-22 11:05:39

本帖最后由 isdkz 于 2023-3-22 11:11 编辑

1、在 Python 中,幂运算操作符(**)的优先级确实高于左侧的一元操作符(例如,一元负号 -),但低于右侧的一元操作符。

所以,当你编写表达式 -3 ** -2 时,实际上会按照以下顺序计算:

首先计算 3 ** -2,结果为 0.1111111111111111;
然后,将一元负号应用于这个结果,即 -0.1111111111111111。

2、当你在后者的表达式中加上括号时,实际上你改变了计算顺序。在这种情况下,(-3) ** (-2) 的计算过程如下:

首先,应用一元负号,将 3 转换为 -3。这里括号其实并没有实质性的影响,只是为了强调负号是应用在整数 3 上的;

然后,计算 (-3) ** (-2),结果为 0.1111111111111111。

总之,括号的作用是改变了操作符的优先级,使得一元负号先于幂运算操作符生效。

这就是为什么两种表达式的计算结果不同的原因。

lzb1001 发表于 2023-3-22 11:59:53

isdkz 发表于 2023-3-22 11:05
1、在 Python 中,幂运算操作符(**)的优先级确实高于左侧的一元操作符(例如,一元负号 -),但低于右侧 ...

(-3) ** (-2) 的结果,居然等于 3 ** (-2) 的结果

实在难以理解

isdkz 发表于 2023-3-22 12:03:11

lzb1001 发表于 2023-3-22 11:59
(-3) ** (-2) 的结果,居然等于 3 ** (-2) 的结果

实在难以理解

有什么难以理解的,(-3) ** (-2) = 1 / ((-3) ** 2)

绝对值相同的负数和正数的平方数相同这不很正常吗?
页: [1]
查看完整版本: 还是关于幂运算