为什么不同意支持0级的单位?

问题描述 投票:1回答:1

标题说明了一切......为什么sympy有以下行为?

import sympy.physics.units as u
print(0*u.meter)
# >>> 0

Pint有这种行为:

import pint
u = pint.UnitRegistry()
print(0*u.meter)
# >>> 0 meter

我认为我更喜欢品脱的行为,因为它允许尺寸一致性。 0是某个单位的适当大小。例如,0度开尔文具有明确的含义......这不仅仅是没有任何东西......

所以我意识到sympy的贡献者可能出于某种原因选择了这个实现。你能帮我看看光吗?

python sympy units-of-measurement
1个回答
1
投票

关于实现原因的讨论属于GitHub(我在哪里raised this issue),而不是在这里。一个简短的答案是单位是一个螺栓固定的结构; SymPy的核心并不是真正的单位意识。

您可以通过将evaluate = False参数传递给Mul来创建0*meter表达式:

>>> Mul(0, u.meter, evaluate=False)
0*meter 

但是,如果与其他内容结合使用,它将变为0。

>>> 3*Mul(0, u.meter, evaluate=False)
0

在UnevaluatedExpr中包装会阻止上述操作,但会导致比解决的问题更多的问题。

>>> 3*UnevaluatedExpr(Mul(0, u.meter, evaluate=False))
3*(0*meter)
© www.soinside.com 2019 - 2024. All rights reserved.