import sympy.physics.units as u
u.find_unit('cm') # --> 'cm' found
u.find_unit('km') # --> 'km' found
# so I can do
float(u.convert_to(2 * u.cm, u.km) / u.km)
现在我想注册
nF
(纳法拉)、pF
(皮法拉)和 uF
(微法拉)
所以我可以像这样进行快速转换(以及其他复杂的计算):
float(u.convert_to(2 * u.uF, u.nF) / u.nF)
我的一个想法就是这样做:
u.uF = 1e-6 * u.F
u.nF = 1e-9 * u.F
float(u.convert_to(36 * u.uF, u.nF) / u.nF)
这有什么坏处吗?我看到的一个问题是,如果我保留该单位,它只会在底座 (F) 中表示。另外,我需要检查以确保我没有覆盖
u
的任何属性。此外,u.find_unit("nF")
返回一个空白列表。
关于如何在我们的单位中应用前缀的好的参考文献并不多。
如果您查看 sympy.physicals.units.definitions.unit_definitions.py 您将看到如何设置定义的示例,例如
mg = milligram = milligrams = Quantity("milligram", abbrev="mg")
mg.set_global_relative_scale_factor(milli, gram)
所以
>>> from sympy.physics.units import *
>>> nf=Quantity('nanoFarad', abbrev='nF')
>>> nf.set_global_relative_scale_factor(nano, farad)
>>> nf
nF
>>> nf.convert_to(farad)
F/1000000000
我不是同情专家,但我认为以下方式可能更稳健(参见这个):
>>> import sympy.physics.units as syu
>>> setattr(syu, 'nanoFarad', syu.Quantity('nanoFarad', abbrev='nF', is_prefixed=True))
>>> setattr(syu, 'nF', getattr(syu, 'nanoFarad'))
>>> getattr(syu, 'nanoFarad').set_global_relative_scale_factor(syu.nano, syu.farad)
>>> syu.nF.convert_to(syu.F)
farad/1000000000
另一个例子:
>>> setattr(syu, 'kilogramforce', syu.Quantity('kilogramforce', abbrev='kgf', is_prefixed=True))
>>> setattr(syu, 'kgf', getattr(syu, 'kilogramforce'))
>>> getattr(syu, 'kilogramforce').set_global_relative_scale_factor(9.80665, syu.newton)
>>>
>>> syu.kgf.convert_to(syu.N)
9.80665*newton
对于某些单位
is_prefixed
(‘毫-’、‘千-’等)应设置为 False
。