我正在编写代码以解析数学表达式字符串,并注意到在Python中对链式幂运算符进行求值的顺序与Excel中的顺序不同。
从http://docs.python.org/reference/expressions.html:
“因此,在无括号的幂和一元运算符序列中,运算符是从右到左求值的(这不限制操作数的求值顺序):-1 * 2得出-1。” *
这意味着,在Python中:
2**2**3
被评估为2**(2**3) = 2**8 = 256
在Excel中,它的工作方式与之相反:2^2^3
被评估为(2^2)^3 = 4^3 = 64
我现在必须为自己的解析器选择一个实现。Excel顺序更容易实现,因为它反映了乘法的求值顺序。
我问办公室周围的一些人,他们对评估的直觉是什么2^2^3
,得到的回应不一。
有人知道有任何有利于Python实现的理由或考虑吗?如果您没有答案,请评论您从直觉中获得的结果- 64
或256
?
实施起来并不难。无论如何,对于诸如分配之类的事情,您的解析器将必须以某种方式支持正确的关联性。
—
marco-fiset 2012年
是的,不是,我实际上实现了它。但是我恢复到Excel约定,因为我的库的主要用途之一是将方程式导出到Excel,因此坚持方程式在其中的工作方式更加有意义。
—
PieterMüller2012年