在 Python 代码中是否有表示数量单位的约定?

Is there a convention for indicating a quantity's units in Python code?

请注意,我是从人类可读性的角度出发的,而不是通知程序本身正在使用的单位。


我目前正在做一个与 机械工程 有很强联系的项目,其中一个出现过几次的问题是不清楚从我的代码中,单位给定的数量——通常是一个常数,但批评也可以扩展到一些变量——是用什么来衡量的。

目前,我正在这样做:

length = 28
# ^^^ measured in mm ^^^

但这感觉很老套而且有点难看。我可以这样做:

length = 28 # <<< measured in mm

这看起来好多了,但我在大学时就被灌输了内联评论是邪恶的,这是一种我很难摆脱的偏见。 (虽然话说回来,大学只教过C和Java,里面行内注释的坑比较明显,行内注释在Python可以接受吗?)

是否有一些有用的约定规定如何以清晰优雅的方式指示数量的单位?还是我一个人做这个?

内联注释在 Python 中当然是可以接受的,但我不确定是否有一种可以接受的注释单元的方式。您可能希望将信息附加到变量名称,例如length_mm = 28。或者构建一个合适的 class 或 namedtuple,例如

>>> from collections import namedtuple
>>> Length = namedtuple('Length', ['value', 'unit'])
>>> ln = Length(28, 'mm')
>>> ln
Length(value=28, unit='mm')
>>> ln.value
28
>>> ln.unit
'mm'

在很好的内联注释之上;

选项 1:变量名

您可以设置一个变量名,但如果您稍后计算和更改它可能会出错 - 所以它更适合常量。

LENGTH_IN_METERS = 3

选项 2:pint

Pint 是一个不错的库,可让您跟上可变测量单位的步伐。

例如

import pint
ureg = pint.UnitRegistry()
3 * ureg.meter + 4 * ureg.cm
<Quantity(3.04, 'meter')>

选项 3:python-measurement

在 Python 中轻松使用和操作 unit-aware 测量对象。

例如

将其他度量换算成千米:

from measurement.measures import Distance
distance = Distance(mi=10).km