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

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

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

四人

根据运算符优先级表,一元否定的优先级低于**运算符。这就是为什么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        

正如我们在这里看到的,first5和at变量的值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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

使用or和not运算符

来自分类Dev

使用>>运算符

来自分类Dev

重载 + 和 - 运算符时出错

来自分类Dev

使用or运算符(||)进行Javascript递归

来自分类Dev

领域:使用IN运算符进行过滤

来自分类Dev

不使用*运算符进行乘法

来自分类Dev

使用 OR 运算符进行布尔赋值

来自分类Dev

使用“ >>”和“&”运算符进行变量分配

来自分类Dev

使用和运算符进行微优化

来自分类Dev

使用$ group stage和$ sum运算符进行聚合

来自分类Dev

使用==和===运算符在php中进行比较

来自分类Dev

使用std :: equal和equals运算符进行比较

来自分类Dev

使用$ group stage和$ sum运算符进行聚合

来自分类Dev

使用移位运算符时出错

来自分类Dev

使用>>运算符重载时出错

来自分类Dev

使用<< >>运算符时的歧义

来自分类Dev

使用移位运算符时出错

来自分类Dev

使用运算符“ <”时,NLog中断

来自分类Dev

使用模态运算符进行 Python 网络解码

来自分类Dev

使用 is 运算符将 Python 类与 None 进行比较

来自分类Dev

Python:和/或运算符奇怪的行为

来自分类Dev

Python OR运算符和括号

来自分类Dev

python中的for循环和in运算符

来自分类Dev

使用CAML <Or>和<And>运算符

来自分类Dev

Excel Pivot使用“和”运算符

来自分类Dev

存储和使用算术运算符

来自分类Dev

混合使用 AND 运算符和 OR javascript

来自分类Dev

重载++和+运算符