【问题标题】:working of exponential operator ** in PythonPython中指数运算符**的工作
【发布时间】:2018-11-21 11:54:46
【问题描述】:

我正在运行一个 python 脚本,我正在计算以下内容:

t - 2 ** (j - 1) * l

在哪里t = 302536j = 6l = 0

这返回给我302536 (t),我无法理解如何。按照我的说法,结果应该是302535 (t - 1)。

2 ** (j - 1) * l 的结果为 0,在我看来,(j - 1) * l 的结果应该是 0。

这是如何计算的?

【问题讨论】:

  • 为什么是熊猫?你能解释一下吗?
  • 这只是一行代码。脚本中的所有其他计算都需要 pandas。也许我应该只写 python
  • 我认为你可以检查operator-precedence - 首先是评估(),然后是**,最后是*

标签: python pow


【解决方案1】:

唯一比权力更紧密的东西是括号。 Python(以及我见过的所有其他本机支持幂运算符的语言)在这一个上遵循算术约定,因此您不需要记住不同的冲突规则集。你的操作可以显式改写如下:

t - ((2 ** (j - 1)) * l)

正如您所指出的,设置 l = 0 会丢弃大部分计算。只是它丢弃了除t 本身之外的所有内容。

您可以通过使用幂运算符的函数形式来明确这些事情。以下任何导入都适用于以下示例:

from math import pow
from operator import pow
from operator import __pow__ as pow
from numpy import pow

看起来你想要/期望

t - pow(2, (j - 1) * l)

但是得到了

t - pow(2, j - 1) * l

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多