【问题标题】:What is the associativity of Python's ** operator?Python 的 ** 运算符的关联性是什么?
【发布时间】:2011-01-23 21:24:41
【问题描述】:

我只是在玩 python 命令行和 ** 运算符,据我所知,它执行幂函数。所以 2 ** 3 应该是(并且是)8,因为 2 * 2 * 2 = 8。

谁能解释我发现的行为?我看不出有任何方法可以用括号对操作进行分组以实际获得 65536 的结果,就像这里获得的一样。

>>> 2 ** 2 ** 2
16
>>> 2 ** 2 ** 2 ** 2
65536
>>> (2 ** 2 ** 2) ** 2
256

【问题讨论】:

    标签: python


    【解决方案1】:
    2** (2**(2**2))
    

    来自http://docs.python.org/reference/expressions.html

    同一框中的运算符从左到右分组(除了比较,包括测试,它们都具有相同的优先级和从左到右的链 - 请参阅比较部分 - 和 取幂,从右到左分组)。

    【讨论】:

      【解决方案2】:

      还有:

      2 ** (2 ** 2 ** 2)
      

      不管怎样,它变成了 2 ** 16。

      这是遵循标准数学运算,其中:234 变为 2 81,而不是 84 因此是 2417851639229258349412352,而不是 4096。

      【讨论】:

        【解决方案3】:

        ** 运算符是右结合的:

        2 ** (2 ** (2 ** 2)) = 2 ** (2 ** 4) = 2 ** 16 = 65536

        【讨论】:

          【解决方案4】:

          它要么关联到左侧,要么关联到右侧。要自己发现答案,请进行实验。

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

          因此,它关联到右侧。

          或者您可以阅读文档。谷歌:“python power”,第一个结果是 http://www.python.org/doc/2.5.2/ref/power.html

          第二句是:

          因此,在一个没有括号的序列中 幂和一元运算符的 运算符从右到 左(这不限制 操作数的求值顺序)。

          确认实验结果。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-10
            • 1970-01-01
            • 2015-05-28
            相关资源
            最近更新 更多