假设我有一个程序,用户在其中获得具有特定维度(例如长度)但单位不同的值。
特点是其中一些单位 (scalefactor
和hubble
) 实际上是无维常数
from pint import UnitRegistry
u = UnitRegistry()
u.define('mylength = kpc*scalefactor/hubble');
#... later in the code...
u.define('hubble = 0.704')
u.define('scalefactor = 0.93')
然后将一个单位转换mylength
为kpc
我做了:
In [29]: (u.mylength*1.0).to(u.kpc)
Out[29]: <Quantity(1.0, 'kiloparsec')>
但输出不应该是一!因为mylength
除以kpc
就是scalefactor/hubble
那就是0.93/.704
那就是1.32
。
所以,我的问题是:如何处理依赖于仅在代码中稍后定义的常量的单元?
更准确地说:
In [1]: from pint import UnitRegistry
In [2]: u = UnitRegistry()
In [3]: u.define('mydist = kpc*scalefactor/hubble')
In [4]: u.define("scalefactor=0.9")
In [5]: u.define("hubble=0.704")
In [6]: float(u.mydist/u.kpc)
Out[6]: 1.0 #<-- I excepcted 1.32 instead of one!