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



请注意,我是从人类可读性的角度来看这一点的,而不是通知程序本身使用的单元


我目前正在进行一个与机械工程有着密切联系的项目,其中一个问题已经出现了好几次,那就是从我的代码中不清楚什么是单位给定量(通常是常数,但批评也可以扩展到一些变量(的度量单位。

目前,我正在做这个:

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

但这感觉很粗糙,有点难看。我可以这样做:

length = 28 # <<< measured in mm

这看起来更好,但我在大学里就被灌输了这样一种观点,即内联评论是撒旦的,我很难摆脱这种偏见。(尽管如此,我在大学里只教过C和Java,在那里内联注释的陷阱更明显。内联注释在Python中可以接受吗?(

是否有一些有用的惯例规定了如何以清晰优雅的方式指示数量的单位?还是我一个人在这件事上?

在内联注释之上,这很好;

选项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中轻松使用和操作单元感知测量对象。

例如

将其他度量转换为公里数:

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

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

>>> 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'

最新更新