Python пинта: установка констант - PullRequest
0 голосов
/ 28 июня 2018

Предположим, у меня есть программа, в которой пользователь получает значения определенного измерения (например, длины), но с разными единицами измерения.

Особенность в том, что некоторые из этих единиц (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!
...