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日 @状态:正在开发中

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java未从Facebook OAuth接收名字、姓氏和姓氏   我自己代码中的java ConcurrentModificationException   java在Android上获得单像素TIFF图像   java图形输出中的swing集成弹出窗口“通知”   将数据库表中的所有数据集插入jTable Java   java如何使用Hibernate获取不完整的集合?   打印无法从java连接到打印机   java使用分隔符拆分带引号的字符串   java Axis2禁用严格验证(wsdl2java中的Eosv)允许什么,如何使其更加严格?   java有人能帮我处理循环代码吗   java将JsonObject数组转换为整数   JavaXWiki扩展:检测事件空间创建   java如何设置图表的文本方向以使用poi旋转所有文本?   eche RecyclerView项的java Set自定义字体   java单元测试带有私有构造函数的spring组件,无需注入   用户界面如何在java中动态显示一组多个元素?   如何从java应用程序调用IDL(交互式数据语言)?   Java的内置库实现