2016-01-06 1 views
4

В pint, как переопределить префикс micro-, который будет пишется µ-, а не u-? Оба псевдонимами при определении единицы, но при получении короткого символа, например, как со спецификацией формата {:~}, pint возвращается к u- даже когда я пытаюсь переопределить micro- = 1e-6 = µ-:В pint, как я могу переопределить микросимвол как μ-, а не u-?

In [155]: ureg.define("micro- = 1e-6 = µ-") 
WARNING 2016-01-06 15:19:07,017 unit._adder:563: Redefining 'micro' (<class 'pint.definitions.PrefixDefinition'>) 
WARNING 2016-01-06 15:19:07,017 unit._adder:563: Redefining 'µ' (<class 'pint.definitions.PrefixDefinition'>) 

(Обратите внимание, что эти предупреждения по-видимому, выдается через вход модуля и показать из-за правило в моем .pythonrc, logging.basicConfig(format=("%(levelname)-8s %(asctime)s %(module)s.%(funcName)s:%(lineno)s: %(message)s"), level=logging.DEBUG))

In [156]: x = 3 * ureg.micrometre 

In [157]: ureg._get_symbol("micrometer") 
Out[157]: 'um' 

In [158]: "{:~}".format(x) 
Out[158]: '3 um' 

Как переопределить micro- запись в реестре, например, что "{:~}".format(x) даст мне 3 µm, а не 3 um?

Редактировать

Я использую pint из последнего хранилища мерзавца:

In [161]: print(pint.__version__) 
0.7.dev0 

Edit 2

ситуация, как представляется, происходит только тогда, когда существуют определенные ранее величины, используйте префикс u-:

In [3]: ureg = pint.UnitRegistry() 

In [4]: q = 12 * ureg.um 

In [5]: ureg.define("micro- = 1e-6 = µ-") 
WARNING 2016-01-06 15:41:25,477 unit._adder:563: Redefining 'micro' (<class 'pint.definitions.PrefixDefinition'>) 
WARNING 2016-01-06 15:41:25,477 unit._adder:563: Redefining 'µ' (<class 'pint.definitions.PrefixDefinition'>) 

In [6]: x = 3 * ureg.micrometre 

In [7]: "{:~}".format(x) 
Out[7]: '3 um' 

Но (новая сессия):

In [7]: x = 3 * ureg.micrometre 

In [8]: "{:~}".format(x) 
Out[8]: '3 µm' 

Так что я полагаю, переопределение по умолчанию должно быть сделано перед использованием u- псевдонима.

+0

отлично работает для me выводит «3 мкм», и я также не получаю предупреждения, какую версию вы используете? –

+0

Huh. Я только что перезапустил 'IPython', и теперь он * показывает * 3 μm'. Кажется, что-то еще происходит ... Возможно, некоторые ранее определенные величины блокируют 'pint' от очистки префикса' u-'? – gerrit

ответ

0

Вы должны переопределить µ- префикс перед тем помощью (правда удобно для несколько проще набрать) u- префикс:

In [2]: ureg = pint.UnitRegistry() 

In [3]: ureg.define("micro- = 1e-6 = µ-") 

In [4]: x = 3 * ureg.um 

In [5]: print("{:~}".format(x)) 
3 µm 

Но (другой сеанс):

In [3]: x = 3 * ureg.um 

In [4]: ureg.define("micro- = 1e-6 = µ-") 

In [5]: print("{:~}".format(x)) 
3 um 
Смежные вопросы