单位感知类型批注#

Python支持使用类型语法的静态类型分析 PEP 484 。有关类型提示、函数批注和其他相关语法的详细指南,请参见 Real Python Guide 。下面我们将介绍如何使用数量类型提示和注释,并包括有关相关单位的元数据。

我们假设有以下导入内容:

>>> import typing as T
>>> import astropy.units as u
>>> from astropy.units import Quantity

土方类型注释#

A Quantity 可用作类型批注::

>>> x: Quantity = 2 * u.km

或作为函数注释。::

>>> def func(x: Quantity) -> Quantity:
...     return x

保留单位#

虽然上面的批注对于注释值的类型很有用,但它并没有告诉我们 Quantity :单位。

可以通过语法包括单元信息 Quantity[unit or "physical_type", shape, numpy.dtype] .:

>>> Quantity[u.m]
typing.Annotated[astropy.units.quantity.Quantity, Unit("m")]
>>>
>>> Quantity["length"]
typing.Annotated[astropy.units.quantity.Quantity, PhysicalType('length')]

看见 typing.Annotated 要解释一下 Annotated

这些函数也可用于函数

>>> def func(x: Quantity[u.kpc]) -> Quantity[u.m]:
...     return x << u.m

多个注解#

多数量、多单位意识 Quantity 使用以下工具支持批注 UnionOptional (包括 | 操作)。

>>> Quantity[u.m] | None
typing.Optional[typing.Annotated[astropy.units.quantity.Quantity, Unit("m")]]
>>>
>>> Quantity[u.m] | Quantity["time"]
typing.Union[typing.Annotated[astropy.units.quantity.Quantity, Unit("m")],
             typing.Annotated[astropy.units.quantity.Quantity, PhysicalType('time')]]

类型批注模块#

输入模块,用于支持与 units .

astropy.units.typing.QuantityLike#

为类量对象输入别名。

这是一个可以转换为 Quantity 对象使用 Quantity() 构造器。

实例

我们假设有以下导入内容:

>>> from astropy import units as u

这是类量对象示例的非详尽列表:

积分和浮动:

>>> u.Quantity(1, u.meter)
<Quantity 1.0 m>
>>> u.Quantity(1.0, u.meter)
<Quantity 1.0 m>

列表和二元组:

>>> u.Quantity([1.0, 2.0], u.meter)
<Quantity [1., 2.] m>
>>> u.Quantity((1.0, 2.0), u.meter)
<Quantity [1., 2.] m>

Numpy数组:

>>> u.Quantity(np.array([1.0, 2.0]), u.meter)

Quantity 对象:

>>> u.Quantity(u.Quantity(1.0, u.meter))
<Quantity 1.0 m>

字符串:

>>> u.Quantity('1.0 m')
<Quantity 1.0 m>

有关更多示例,请参阅 numpy.typing 定义 numpy.typing.ArrayLike .

Quantity | Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] 的别名

astropy.units.typing.UnitLike: TypeAlias = astropy.units.core.UnitBase | str | astropy.units.quantity.Quantity#

为可以转换为单位的输入别名。

看到 unit-like .请注意,这仅包括纯量。

astropy.units.typing.UnitPower: TypeAlias = int | float | fractions.Fraction#

对象可能是组件的乘势的类型 UnitBase 例如

astropy.units.typing.UnitPowerLike: TypeAlias = int | float | fractions.Fraction | numpy.integer | numpy.floating#

指定可用于创建组件权力的类型 UnitBase 例如

astropy.units.typing.UnitScale: TypeAlias = float | complex#

适用于可以是规模因子的类型 CompositeUnit

astropy.units.typing.UnitScaleLike: TypeAlias = float | complex | int | fractions.Fraction | numpy.number#

指定可用于创建的比例因子的类型 CompositeUnit