python对单位数量的支持
units的Python项目详细描述
为数量和单位提供支持,这是严格禁止的 不兼容数量之间的操作无效。例如,我们不能添加 2米到5秒,因为这没有意义。
为什么?
来自维基百科:
火星气候轨道飞行器的预定轨道高度为 距火星140-150公里(460000-500000英尺)。但是,导航错误 使飞船的高度低至57公里(19万英尺)。宇宙飞船 在这个低海拔地区被大气压力和摩擦破坏。这个 由于美国宇航局的一个分包商(洛克希德马丁公司)使用 英制单位(磅秒)而不是公制。
安装
这个模块是通过pypi分发的。所以,您可以这样做:
pip install units
或:
easy_install units
或者,您可以在http://pypi.python.org/pypi/units/
如果您想要最新的:
pip install -e hg+https://bitbucket.org/adonohue/units/#egg=units
如何使用
使数量
单位是用于生成数量的对象:
>>> from units import unit >>> metre = unit('m') >>> print(metre(7) + metre(11)) 18.00 m
您可以通过某些方式混合和匹配这些数量:
>>> from units import unit >>> metre = unit('m') >>> second = unit('s') >>> print(metre(10) / second(2)) 5.00 m / s >>> print(metre(10) ** 3) 1000.00 m * m * m
但如果你犯了错误,你会得到一个安全网:
>>> from units import unit >>> try: ... unit('m')(5) + unit('s')(5) ... except units.exception.IncompatibleUnitsError: ... print('Got an error!') Got an error!
创建自己的单元
在你开始制作自己的单位之前,你应该检查一下 您可以免费获得:
>>> import units.predefined >>> units.predefined.define_units()
它包括所有官方的国际单位制,一些测量时间的单位,如 天和周,单位为杯、加仑和升,英制 单位和更多。
你已经看到了如何制作自己的简单单元。你打电话来 单位函数并给它一个字符串:
>>> from units import unit >>> blog = unit('blog') >>> print(blog(3)) 3.00 blog
这些单元自动与其他单元不兼容。
您可以将单位与乘法和除法结合起来生成新单位:
>>> from units import unit >>> blogs_per_network = unit('blog') / unit('network') >>> print(blogs_per_network(2.34)) 2.34 blog / network
有一个内置的快捷方式,可以生成标量倍数的新单位 其他单位:
>>> from units import unit, scaled_unit >>> sickle = scaled_unit('sickle', 'knut', 29) >>> galleon = scaled_unit('galleon', 'sickle', 17) >>> knut = unit('knut') >>> galleon(3.0) + sickle(1.0) - knut(25.0) == knut(1483) True
还有一个快捷方式可以为稍微复杂的单元命名:
>>> from units import unit, named_unit >>> from units.predefined import define_units >>> define_units() >>> twp = named_unit('tweetpack', ['tweet', 'meme'], ['day'], 5) >>> # A tweetpack is 5 tweetmemes per day >>> print(twp(2)) 2.00 tweetpack >>> tweet, meme, day = [unit(x) for x in ['tweet', 'meme', 'day']] >>> print(twp(5) - (tweet(5) * meme(4) / day(2))) 3.00 tweetpack
如果两个单元兼容,您可以轻松地在它们之间进行转换:
>>> from units import unit >>> from units.predefined import define_units >>> define_units() >>> furlongs_per_fortnight = unit('fur') / unit('fortnight') >>> kph = unit('km') / unit('h') >>> print(furlongs_per_fortnight(kph(100))) 167024.58 fur / fortnight
您也可以使用低级构造函数来创建自己的单元和 量。不过,上面显示的方法更简单。
警告
此模块无法以数值精度或 浮点转换和Python2与Python3的问题比比皆是:
from units import unit unit('m')(5) / unit('m')(7) # 0 in Python 2.x, 0.7142857142857143 in Python 3.
更危险的是,某些内部操作有隐式算法 这会让你大吃一惊:
from units import unit, scaled_unit sickle = scaled_unit('sickle', 'knut', 29) galleon = scaled_unit('galleon', 'sickle', 17) knut = unit('knut') galleon(3) + sickle(1) - knut(25) == galleon(3) # True in Python 2.x, False in Python 3
使用修改过的python
在单元增强的python中,您可以执行以下操作:
print(2cm / 0.5 s) -> 4.0 cm / s
units-enhanced python是pypy的一个版本,具有内置的支持 对于单位。您可以在unitpython目录中找到它。基本上, 将提供的修补程序应用于Pypy的R66797。如果你穿着合适的 unix中包含的unitpython/unitpython.sh为您提供了这一功能。
@需要:u{python<;http://python.org/>;}>;=2.5 @自:2009年8月10日 @状态:正在开发中