单位感知类型批注#
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 使用以下工具支持批注 Union 或 Optional (包括 | 操作)。
>>> 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