gpt4 book ai didi

python - 使用 python 的 ** 运算符和 * 运算符时签名

转载 作者:行者123 更新时间:2023-11-28 21:49:34 25 4
gpt4 key购买 nike

>>> -5**4
-625
>>> -5*-5*-5*-5
625

即使我们做同样的事情,也存在符号问题。谁能解释为什么会这样?

最佳答案

根据Operator precedence table ,一元否定的优先级低于 ** 运算符。这就是为什么首先计算 5**4 然后应用一元求反的原因。

因此,表达式 -5**4 的计算结果为 -(5 ** 4),即 -(625).

相反,先计算-5,然后应用求幂(**) 运算符,您将得到预期的结果

>>> -5**4
-625
>>> (-5)**4
625

要查看内部实际发生的情况,您可以将表达式拆分为两部分。将4赋值给一个变量并在表达式中使用它然后反汇编字节码

>>> dis(compile('a=4;-5**a', 'string', 'exec'))
1 0 LOAD_CONST 0 (4)
3 STORE_NAME 0 (a)
6 LOAD_CONST 1 (5)
9 LOAD_NAME 0 (a)
12 BINARY_POWER
13 UNARY_NEGATIVE
14 POP_TOP
15 LOAD_CONST 2 (None)
18 RETURN_VALUE

正如我们在这里看到的,第一个 5 和变量 a 的值用于 BINARY_POWER 操作和 UNARY_NEGATIVE 应用于其结果。

但是当你首先计算 -5 时,

>>> dis(compile('a=4;(-5)**a', 'string', 'exec'))
1 0 LOAD_CONST 0 (4)
3 STORE_NAME 0 (a)
6 LOAD_CONST 1 (-5)
9 LOAD_NAME 0 (a)
12 BINARY_POWER
13 POP_TOP
14 LOAD_CONST 2 (None)
17 RETURN_VALUE

BINARY_POWER 操作在 -5 和变量 a 的值上完成。

关于python - 使用 python 的 ** 运算符和 * 运算符时签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com