在 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
请注意,我是从人类可读性的角度出发的,而不是通知程序本身正在使用的单位。
我目前正在做一个与 机械工程 有很强联系的项目,其中一个出现过几次的问题是不清楚从我的代码中,单位给定的数量——通常是一个常数,但批评也可以扩展到一些变量——是用什么来衡量的。
目前,我正在这样做:
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