繁体   English   中英

无法理解**运算符的行为

[英]not able to understand behaviour of ** operator

我突然遇到了这个,我无法理解为什么会这样!

在python提示符下,在3以后使用**运算符,如下所示给出错误的结果。

>>> 2**2**2
16
>>> 3**3**3
7625597484987L
>>> 4**4**4
13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096L

然后我认为我必须使用括号,所以我使用它,它给出了正确的结果。

>>>(3**3)**3
19683

但是//操作符正在支持并在这种操作中给出正确的结果,即

>>> 4//4//4
0
>>> 40//4//6
1

请帮我理解。

**是正确联想的。 在数学上,这是有道理的:3 3 3等于3 27 ,而不是27 3

文档声明它是右关联的:

在功率和一元运算符的不明确序列中,运算符从右到左进行评估。

正如文档所说:

同一个框组中的操作符从左到右(除了比较...和取幂,从右到左分组)。

换句话说, **是右关联的,而// (与除比较之外的所有其他运算符一样)是左关联的。

在其他地方,关于电力运营商的整个部分,在给出关于电力和一元运营商如何相互作用的规则(这里不相关)后,澄清:

[I] n一个不明确的权力和一元运算符序列,运算符从右到左进行评估......

这实际上是大多数编程语言的做法。

在数学中,指数不是用对称的算子语法编写的,所以没有理由它应该具有相同的默认关联性。 右关联求幂不太有用,因为(2**3)**42**(3*4)完全相同,而没有什么明显与2**(3**4)

看起来**运算符是右关联的,意味着3**3**3评估为3**274**4**44**256

当你做4**4**4类的东西时,你应该使用括号来明确你的意图。 正如@cHao指出的那样,解析器将解决模糊性,但它让其他人感到困惑。 你应该使用(4**4)**44**(4**4) 这里明确的比隐含更好,因为获取权力并不是我们一直看到的工作日操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM